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

Поділитися
Вставка
  • Опубліковано 23 вер 2018
  • 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-fk3gy5qg5c 5 років тому +11

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

  • @lenastrokov4532
    @lenastrokov4532 Рік тому +1

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

  • @PafosnijManul
    @PafosnijManul 3 роки тому +5

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

  • @megabyte_ga
    @megabyte_ga 3 роки тому +1

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

  • @RenescoRocketman
    @RenescoRocketman 5 років тому

    На 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 років тому +7

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

    • @user-ou8bf3rm3o
      @user-ou8bf3rm3o 5 років тому

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

  • @stroeved
    @stroeved 11 місяців тому

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

  • @user-lp1tx8qy4w
    @user-lp1tx8qy4w 3 роки тому +2

    Спасибо за лекцию! У меня есть вопрос, могу ли я увидеть 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)

  • @ill4374
    @ill4374 Рік тому

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

  • @user-mq5eq4sg9j
    @user-mq5eq4sg9j 2 роки тому

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

    • @Vadim_Abbakumov
      @Vadim_Abbakumov 2 роки тому

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

  • @shandi1241
    @shandi1241 4 роки тому

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

    • @Vadim_Abbakumov
      @Vadim_Abbakumov 4 роки тому +1

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

    • @shandi1241
      @shandi1241 4 роки тому

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

  • @jewgenijmoldawski3306
    @jewgenijmoldawski3306 6 місяців тому

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

  • @ywbc1217
    @ywbc1217 3 роки тому

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

    • @ywbc1217
      @ywbc1217 3 роки тому

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

  • @MinisterDorado
    @MinisterDorado Рік тому

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

  • @user-vq7uu2tj7d
    @user-vq7uu2tj7d 5 років тому +1

    Уважаемый Вадим Леонардович, вы забыли стандартизировать данные. У меня с такой же архитектурой, но со стандартизированными данными получилось околи 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 років тому +4

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

    • @drewya9186
      @drewya9186 4 роки тому

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

    • @itkot7390
      @itkot7390 4 роки тому

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

    • @Vadim_Abbakumov
      @Vadim_Abbakumov 4 роки тому

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

  • @olehberehovskyi6082
    @olehberehovskyi6082 5 років тому

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

    • @olehberehovskyi6082
      @olehberehovskyi6082 5 років тому

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

    • @Vadim_Abbakumov
      @Vadim_Abbakumov 5 років тому +2

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

  • @deni5n
    @deni5n 4 роки тому +2

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

    • @Vadim_Abbakumov
      @Vadim_Abbakumov 4 роки тому +6

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

  • @mgsupgs
    @mgsupgs 3 роки тому +1

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