Comments 15
Когда же вы уже поймете, что на данный момент нет никакого ИИ! Или, по-вашему, найти лицо на фотографии это искусственный интеллект?
Справедливости ради, корректное говорить о машинном обучении (ML), или о глубоком обучении (DL).
А что такое по вашему ИИ? Нечто разговаривающее на языке человеков с вами по душам? :)
Это же вопрос терминологии, ответ на который не решает никакой проблемы.
Можно считать, что ИИ — это решение машиной тех задач, про которые считалось, что решить их может только человеческий мозг (венец творение природы).
Когда-то победа эвм в шахматы над человеком вызывала вау эффект, когда-то победа эвм в шахматы над чемпионом мира была новостью, когда-то считали что го слишком сложен для машины, в какой-то момент сетки внезапно стали решать имиджнет лучше человека.
Когда-то люди считали что все эти задачи — прерогатива человеческого интеллекта.
Или может вашим критерием является тест Тьюринга? Ну вот сейчас вам Google Duplex позвонит, а вы и не заметите что это робот. Будете считать, что Google Duplex это сильный ИИ?
Можно считать, что ИИ — это решение машиной тех задач, про которые считалось, что решить их может только человеческий мозг (венец творение природы).
Когда-то победа эвм в шахматы над человеком вызывала вау эффект, когда-то победа эвм в шахматы над чемпионом мира была новостью, когда-то считали что го слишком сложен для машины, в какой-то момент сетки внезапно стали решать имиджнет лучше человека.
Когда-то люди считали что все эти задачи — прерогатива человеческого интеллекта.
Или может вашим критерием является тест Тьюринга? Ну вот сейчас вам Google Duplex позвонит, а вы и не заметите что это робот. Будете считать, что Google Duplex это сильный ИИ?
а что, нет?)
Хорошо бы обучить сети без внимания и с вниманием на одной и той же тестовой задаче, и выложить сравнение метрик.
Такой материал есть, на английском. Не помню ссылку, большой документ.
Лично у меня получалось обучать переводчик с английского на русский на датасете из субтитров (Open Subtitles) с attention и без. Разница на валидационной выборке получалась примерно 2% (метрика accuracy). Без внимания ~85%, с вниманием ~87%. Но у меня длина фраз была небольшой, до 32 токенов, а в большинстве своем — до 15. Подозреваю, что на коротких последовательностях механизм внимание не дает существенного выигрыша.
из за вот этого говнокода
непонятно что происходит.
Можно интерпретировать без знания кераса что написана белиберда.
этого в коде не происходит.
Интуитивно читается:
пусть на входе полносвязный слой в 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
Кстати, теоретически слой может быть и не один
автор не только понимает принципы чистоты кода, но и не поленился указать обратное распостранение. Там считается производная произведения типа
помня что производная от софтмакс линейная будет:
помня что производная от танха будет 1 — tanh^2(x):
Хух. конечно скорее всего я где то в рассуждениях не прав, прошу подкоректировать.
P.S а стоп, я уже сплю не сразу допёр что если взять логарифм будет log(x) + log_softmax(tanh(x*w+b)) то есть атеншн слой эквивалентен resnet с log активациями?
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: если запустить на компе где есть GPU то GPU она задействует… Однако это не выжимает из GPU всё ибо в сути RNN нет идеи для параллелизма и будет у вас 1 CPU или 4000 Cuda она всё равно возьмёт только 1. Прирост производительности для GPU есть (что я знаю), но за счёт существенно более быстрой графической памяти. Вот на TPU оно обучается очень быстро! B TPU показывает что скорость оперативы много значимее чем скорость ядер (хотя там же векторные инструкции мощные?). Я слышал что в tensorflow 2.0 что-то придумают и сделают параллелизм для LSTM на GPU. Если знаете что они там сделают, чтобы распараллелить рекурентную сеть, то расскажите! (или дайте ссылку).
всё ибо в сути RNN нет идеи для параллелизмачто за ерунда, можно хотя бы элементы батча паралельно пускать, а так расчёт реккурентной цепи конечно последовательный но умножение матриц всегда можно распаралелить с выигрышем
Sign up to leave a comment.
Attention для чайников и реализация в Keras