🔥

Тред #3


Что стоит знать в фреймворке (для определенности pytorch): - как строится вычислительный граф (у тензоров есть backward-функция, за которую можно дернуть для бекпропа) - как представлять данные (условно складываем картинки в тензора [bs, channels, height, width])

- как управлять оптимизатором (обход весов, lr scheduling, grad_clip..) - как мерить скорость и утилизацию железа (tqdm, watch nvidia-smi, profiler..) - как дебажить наны (forward_hook, backward_hook) - как сериализовать модель (torch.save, jit.trace, jit.script)

- как вычисляется лосс (давайте опросом, что должно быть у сети для многоклассовой классификации в голове?) Пояснения на всякий случай: - в доку не подглядывать! - FC=Linear (иначе не лезло) - если не понимаете о чем речь => reply с вопросом
🤔 18.0% FC,Softmax,NLLLoss
🤔 23.6% FC,LogSoftmax,NLLLoss
🤔 51.7% FC,Softmax,CrossEntropyLo
🤔 6.7% FC,LogSoftmax,CrossEntrop

вдогонку микровопрос про бекпроп. У нас есть MLP (несколько Linear слоев с нелинейностями или без), можно ли инициализировать матрицу весов нулями?
🤔 30.8% да
🤔 69.2% нет

второй микровопрос, можно ли инициализировать матрицу весов нулями в двух Linear слоях подряд?
🤔 18.9% да по индукции
🤔 81.1% теперь точно нет

Попробуем как в старые добрые на доске, но без доски. Если x не нулевой и градиенты на выход придут ненулевые, то W изменится на первой итерации и дальше все будет хорошо. Могут ли градиенты быть не нулевыми? Зависит от дальнейшего графа :) еще один сломанный FC не даст учиться
notion image

Названия и обрывки математики из лекций приводят к путанице. Мы вроде бы помним формулу, но что подавать на вход конкретной функции? В pytorch дела обстоят так: - NLL ожидает на вход логарифмы вероятностей (logsoftmax) - CE ожидает на вход сырые логиты (без sm и lsm)

LogSoftmax можно применять повторно, ничего не сломается) Так что правильный вариант (FC, LSM, NLL) и окнорм (FC, LSM, CE). Бтв, гадать как правильно не надо! Разберитесь с математикой и документацией по слою :) попробуйте что будет если сделать неправильно