Лекция 2. Нейронные сети. Теория и первый пример (Анализ данных на Python в примерах и задачах. Ч2)

compscicenter.ru/
Обучение нейронной сети. Обратное распространение ошибки. Метод скорейшего спуска (Gradient descent) и его обобщения. Эпохи и batch'и. Введение в Keras и TensorFlow. Инициализация весов нейронной сети. Стандартизация данных предотвращает насыщение. Обучение нейронной сети прямого распространения. Оптимизация (optimizers)в Keras. Формулы для поправок весов при обучении нейронной сети. Пример обучения нейронной сети.
Лекция №2 в курсе "Анализ данных на Python в примерах и задачах. Часть 2" (осень 2018).
Преподаватель курса: Вадим Леонардович Аббакумов
Страница лекции на сайте CS центра: bit.ly/2xqPsl3
Все видео курса: bit.ly/2NEwnWR

Пікірлер: 34

  • @S_-ld2no
    @S_-ld2noАй бұрын

    "Раз молчите - значит боитесь, если боитесь - значит непонятно" - эх, если бы все преподаватели были такими идеальными

  • @user-fk3gy5qg5c
    @user-fk3gy5qg5c5 жыл бұрын

    Огромное спасибо за лекцию!

  • @lenastrokov4532
    @lenastrokov4532 Жыл бұрын

    Очень нравится лекция, спасибо! На 9 минуте в матрице сопряжения мы неправильно сказали мальчик на девочку в левом нижнем все таки… значит штраф самый большой должен туда, а в верхнем правом - это мальчики, которых мы называем девочками - с этими случаями мы согласны на ошибку - туда можно штраф 1 заложить

  • @PafosnijManul
    @PafosnijManul3 жыл бұрын

    Прекрасный лектор, отличный курс. Узнал много полезного

  • @megabyte_ga
    @megabyte_ga3 жыл бұрын

    Лекция смотрится на одном дыхании! Конечно, не все понятно с первого раза, а по методам оптимизации и прочим настройкам придется и документацию дополнительно почитать... Но Вы вселили в меня уверенность в том, что я смогу *управлять* обучением сети с помощью Keras, а не блуждать, как в темном лесу. Вадим Леонардович, спасибо!

  • @RenescoRocketman
    @RenescoRocketman5 жыл бұрын

    На 59:00 про ограничения, связанные с производной сигмоиды. Возник вопрос: а почему не компенсировать это дело различными лернинг рейтами для разных слоев? Если ошибка идет назад с таким затуханием, то можно было бы лернинг рейты делать соответственно больше на слоях дальше от выхода.

  • @Vadim_Abbakumov

    @Vadim_Abbakumov

    5 жыл бұрын

    Почему бы и нет. Можно пробовать. Но если у нейронной сети больше 100 слоев, брать параметр скорости обучения у первого слоя 2**100? Лично мне проще использовать RELU и не думать о подборе скорости у каждого слоя...

  • @RenescoRocketman

    @RenescoRocketman

    5 жыл бұрын

    Спасибо за ответ! (даже не ожидал, что тут в комментариях сам лектор может ответить) Действительно, для 100 слоев такой подход не годится. Я как-то думал о 3-5 слоях. Насчет РЕЛУ было бы здорово узнать, как для нее вообще обстоит дело с минусовыми данными на входе. Она ведь в таком случае выдает y=0. Получается, и значение 0, и производная 0. Такой нейрон "умер" навсегда, или это как-то обошли в алгоритме обратного распространения ошибки для РЕЛУ?

  • @Vadim_Abbakumov

    @Vadim_Abbakumov

    5 жыл бұрын

    Может так умереть до 40% нейронов. Выход из положения - использовать Leaky ReLUs. Цена такого решения - добавляется много параметров. Но Вы учитывайте пожалуйста, что читается не курс по нейронным сетям, а про анализ данных. Хотя возможно и стоит в будущем прочесть курс по Deep Learning'у

  • @user-ou8bf3rm3o

    @user-ou8bf3rm3o

    5 жыл бұрын

    @@Vadim_Abbakumov , для LeakyReLU нужно только подобрать коэффициент наклона, т. е. внешний параметр. Если, конечно, вы не имели в виду Parametric ReLU, параметры в котором требуется обучать.

  • @user-mq5eq4sg9j
    @user-mq5eq4sg9j2 жыл бұрын

    Правильно я понял, что при подаче обучающего объекта последовательно пересчитываются все веса всех внутренних узлов?

  • @Vadim_Abbakumov

    @Vadim_Abbakumov

    2 жыл бұрын

    В теории да. На практике коррекции весов производятся после подачи пакета наблюдений из обучающей выборки (batch).

  • @user-lp1tx8qy4w
    @user-lp1tx8qy4w3 жыл бұрын

    Спасибо за лекцию! У меня есть вопрос, могу ли я увидеть accuracy своей тестовой выборки с определенным пороговым значением (бинарный классификатор). Я хочу что бы я видел % точности тех прогнозов в которых система уверена в одном из классов на 60%. Спасибо!

  • @Vadim_Abbakumov

    @Vadim_Abbakumov

    3 жыл бұрын

    # Пусть пороговое значение w будет равно 0.6 w = 0.6 # Вычисляю accuracy np.mean((model.predict_proba(X_test)[:, 1] > w).astype(int) == y_test) # Повторяю предыдущее шаг за шагом # zzz_1 numpy array, содержит вероятности # принадлежать классам "0" и "1" zzz_1 = model.predict_proba(X_test) # Сравниваю вероятность принадлежать классу "1" и порог zzz_2 = zzz_1[:, 1] > w # Перекодирую результат в "0" и "1" zzz_3 = zzz_2.astype(int) # Считаю accuracy np.mean(zzz_3 == y_test)

  • @stroeved
    @stroeved11 ай бұрын

    интересно какого монстра обучали на добыче биткоина🤯

  • @jewgenijmoldawski3306
    @jewgenijmoldawski33065 ай бұрын

    Полезная лекция, как по мне, большое спасибо. Но должен отметить, что безусловно компетентный лектор, по-моему, слишком часто прыгает с одного места на другое, причем совсем неожиданное. Это держит в постоянном напряжении. Спасает только то, что можно перемотать и повторить.

  • @ill4374
    @ill4374 Жыл бұрын

    17:00 это метод градиентного спуска

  • @shandi1241
    @shandi12413 жыл бұрын

    а почему на первом слое в примере с винами, 13 характеристик а нейронов всего 9? мы не потеряем какие-нибудь важные моменты в характеристиках упростив первый слой?

  • @Vadim_Abbakumov

    @Vadim_Abbakumov

    3 жыл бұрын

    IMHO даже 9 много. С 13 нейронами в первом слое очень велик риск переобучения. Мы надеемся отфильтровать шум в данных, сохранив закономерность (часто говорят сигнал).

  • @shandi1241

    @shandi1241

    3 жыл бұрын

    Вадим Аббакумов спасибо за ответ! а есть какие-нибудь эмпирические приемы как выбрать количество нейронов в первом слое? Слышал, что для анализа изображений, допустим, фиксированного размера NxM, нейронов берут N*M штук? Или лучше не так? . А все понял, стоило лишь посмотреть следующую лекцию 😄

  • @user-vq7uu2tj7d
    @user-vq7uu2tj7d5 жыл бұрын

    Уважаемый Вадим Леонардович, вы забыли стандартизировать данные. У меня с такой же архитектурой, но со стандартизированными данными получилось околи 97% accuracy на тестовых данных. Вот как нужно стандартизировать: from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)

  • @Vadim_Abbakumov

    @Vadim_Abbakumov

    5 жыл бұрын

    Вы правы. Так лучше. Хотя отказ от стандартизации не ошибка, он часто ускоряет обучение, но обучать можно и без стандартизации. Ваш код правильный, но его недостаточно. Надо сохранить средние и стандартные отклонения, чтобы на тестовом множестве и в production при стандартизации использовать именно их.

  • @drewya9186

    @drewya9186

    4 жыл бұрын

    Что делает стандартизация данных?

  • @itkot7390

    @itkot7390

    4 жыл бұрын

    Перед стандартизацией StandardScaler необходимо выполнить логарифмирование. Так как StandardScaler вычетает среднее и делит на стандартное отклонение , в таком случае если в данных были выбросы , мы получим искажённое среднее. И стандартизация не даст единого масштаба

  • @Vadim_Abbakumov

    @Vadim_Abbakumov

    4 жыл бұрын

    @@drewya9186 Стандартизация не улучшает качество модели, но может на порядки ускорить обучение

  • @ywbc1217
    @ywbc12173 жыл бұрын

    "Приложенные файлы" -- ССЫЛКА НЕ РАБОТАЕТ (This site can’t be reached)

  • @ywbc1217

    @ywbc1217

    3 жыл бұрын

    ссылки заработали -- спасибо

  • @MinisterDorado
    @MinisterDorado Жыл бұрын

    1:15:53 Все так делают. LOL

  • @olehberehovskyi6082
    @olehberehovskyi60825 жыл бұрын

    Поставил себе на первый слой 200 нейронов, на второй - 300 и аккураси уже 84,74% xD

  • @olehberehovskyi6082

    @olehberehovskyi6082

    5 жыл бұрын

    Поменял релу на сигмоиду и уже 91,52%

  • @Vadim_Abbakumov

    @Vadim_Abbakumov

    5 жыл бұрын

    Не могу принять нейронную сеть, в которой нейронов больше, чем наблюдений в обучающей выборке... Буду держаться правила KISS.

  • @deni5n
    @deni5n4 жыл бұрын

    ух, мысль у лектора скачет от одной к другой и приэтом он использует несколько файлов примеров. очень тяжело следить затмыслью лектора. почему бы не сделать один ноутбук, где последовательно изложить материал и не следовать ему? в конце лекции вообще убил пример: лектор показал ноутбук, в котором сначала преобразовал значения из pandas df в numpy arrayа, потом пробует получить первые строки данных этого массива через метод pandas head(), у него не получается и он пишет: а почему не получилось? хочется спросить в ответ: зачем этот вопрос? ведь лекция не по pandas а по обучению нейронных сетей в keras!!

  • @Vadim_Abbakumov

    @Vadim_Abbakumov

    4 жыл бұрын

    1. Включил, так как видел, что новички часто ошибаются в этом месте. 2. Это не лекция по обучению нейронных сетей в keras. Материал должен показать основные элементы обучения нейронных сетей, чтобы облегчить изучение TF. Более того, сейчас в лекциях я вместо TF использую PyTorch. Хотя IMHO после лекций слушатели без проблем обучают нейронные сети 3. Один ноутбук еще хуже. Приходится либо скакать по нему, либо повторять фрагменты скрипта несколько раз. Тут Вы не в теме. 4. Вам просто не зашел мой формат. Могу порекомендовать найти на youtub'e курс, в котором четко и нараспев пересказывается книга Шолле Глубокое обучение на Python. Похоже Вам такой формат подойдет больше. Кстати, книга очень неплохая.

  • @mgsupgs
    @mgsupgs3 жыл бұрын

    Огромное спасибо за лекции!

Келесі