Pull to refresh

Comments 15

Когда же вы уже поймете, что на данный момент нет никакого ИИ! Или, по-вашему, найти лицо на фотографии это искусственный интеллект?

Справедливости ради, корректное говорить о машинном обучении (ML), или о глубоком обучении (DL).
А что такое по вашему ИИ? Нечто разговаривающее на языке человеков с вами по душам? :)

Совсем мозг отсутствует? В таком случае обратись к Википедии с запросом 'Интеллект'.

Это же вопрос терминологии, ответ на который не решает никакой проблемы.

Можно считать, что ИИ — это решение машиной тех задач, про которые считалось, что решить их может только человеческий мозг (венец творение природы).
Когда-то победа эвм в шахматы над человеком вызывала вау эффект, когда-то победа эвм в шахматы над чемпионом мира была новостью, когда-то считали что го слишком сложен для машины, в какой-то момент сетки внезапно стали решать имиджнет лучше человека.
Когда-то люди считали что все эти задачи — прерогатива человеческого интеллекта.

Или может вашим критерием является тест Тьюринга? Ну вот сейчас вам Google Duplex позвонит, а вы и не заметите что это робот. Будете считать, что Google Duplex это сильный ИИ?
Хорошо бы обучить сети без внимания и с вниманием на одной и той же тестовой задаче, и выложить сравнение метрик.
Такой материал есть, на английском. Не помню ссылку, большой документ.
Лично у меня получалось обучать переводчик с английского на русский на датасете из субтитров (Open Subtitles) с attention и без. Разница на валидационной выборке получалась примерно 2% (метрика accuracy). Без внимания ~85%, с вниманием ~87%. Но у меня длина фраз была небольшой, до 32 токенов, а в большинстве своем — до 15. Подозреваю, что на коротких последовательностях механизм внимание не дает существенного выигрыша.
из за вот этого говнокода
features_dim = self.features_dim
step_dim = self.step_dim
eij = K.reshape(K.dot(K.reshape(x, (-1, features_dim)), K.reshape(self.W, (features_dim, 1))), (-1, step_dim))


непонятно что происходит.

Можно интерпретировать без знания кераса что написана белиберда.

В функции создаётся параметрический уровень (self.W) который потом скалярно умножается (K.dot) на входной вектор

этого в коде не происходит.
Интуитивно читается:
пусть на входе полносвязный слой в 120 элементов, заданы features_dim = 20, step_dim =3,
решепим в вход: (6 ,20) dot(20,1) = (6,1) => (2,3) что бредово, так как одна карта W применена к разным позициям полносвязного вектора со страйдом как свой размер.
Почему W решейпится каждый раз?
Или на входе батч, но тогда не надо решейпить?
Далее нормировка вдоль каждых 3-х элементов, автор уверен в этом?

Может я неправильно интерпретирую говнокод Кераса, следовало написать на numpy или в псевдокоде чистый код на 3 строки.

моё видение:
— пропускаем вход x через обычный полносвязный слой y = x*w + b
— применяем активацию ya = norm(exp(tanh(x))
Кстати, напишите пожалуйста в комментариях, если вы узнали в этой логике какую-то математическую высокоуровневую функцию.

напоминает некий мульти-софтмакс что ли…
— выходом будет x*ya
Кстати, теоретически слой может быть и не один

автор не только понимает принципы чистоты кода, но и не поленился указать обратное распостранение. Там считается производная произведения типа
(x*softmax(tanh(x))' = x' * softmax(tanh(x)) + x* (softmax(tanh(x))'
помня что производная от софтмакс линейная будет:
softmax(tanh(x)) + x* (softmax(tanh(x)) * (tanh(x))'
помня что производная от танха будет 1 — tanh^2(x):

dx = y/ x+ y * ( 1 - tanh^2(x))
Хух. конечно скорее всего я где то в рассуждениях не прав, прошу подкоректировать.

P.S а стоп, я уже сплю не сразу допёр что если взять логарифм будет log(x) + log_softmax(tanh(x*w+b)) то есть атеншн слой эквивалентен resnet с log активациями?

спасибо за статью
есть несколько замечаний:
>невозможность осуществлять обучение на GPU
извините, но это же не так. На гпу можно обучать, просто не вся память будет занята, но это можно вылечить взяв побольше батч (что не всегда положительно влияет)

> Attention применяется в работе со звуком, с временными последовательностями
дважды повторяется (такое же было выше через 2 абзаца)

>например attenytion-keras который можно установить с github
добавьте плз урлу, а то не нашел у Вас (https://github.com/thushv89/attention_keras)

и еще, не планируете на торче это также описывать?

не сочтите за плохое отношение к Вашей статье. все ок, просто есть небольшие поправки.
Спасибо, правки внёс. По поводу обучения на GPU: если запустить на компе где есть GPU то GPU она задействует… Однако это не выжимает из GPU всё ибо в сути RNN нет идеи для параллелизма и будет у вас 1 CPU или 4000 Cuda она всё равно возьмёт только 1. Прирост производительности для GPU есть (что я знаю), но за счёт существенно более быстрой графической памяти. Вот на TPU оно обучается очень быстро! B TPU показывает что скорость оперативы много значимее чем скорость ядер (хотя там же векторные инструкции мощные?). Я слышал что в tensorflow 2.0 что-то придумают и сделают параллелизм для LSTM на GPU. Если знаете что они там сделают, чтобы распараллелить рекурентную сеть, то расскажите! (или дайте ссылку).
мой поинт был в том, что это все же возможно сделать, не более
в тф2.0 еще не вникал
всё ибо в сути RNN нет идеи для параллелизма
что за ерунда, можно хотя бы элементы батча паралельно пускать, а так расчёт реккурентной цепи конечно последовательный но умножение матриц всегда можно распаралелить с выигрышем
Аффтар просто не разбирается в предмете статьи, но зато делает очень категоричные заявления…
Sign up to leave a comment.

Articles

Change theme settings