(←) предыдущая запись ; следующая запись (→)
Мне кажется, в нейросетях и особенно в NLP произошёл ещё один сдвиг парадигмы. Существенно менее значительный, чем вышеописанный переход к сеткам, но имеющий занятную аналогию в архитектуре процессоров.
Существует два подхода к организации вычислений. Компьютер, по сути, занимается очень простой задачей: применяет некоторый алгоритм к конкретным данным. Когда процессор вычисляет два плюс два, он берёт из памяти данные (числа 2 и 2). Команду add он тоже берёт из памяти, где лежит программа. Проводит операцию и результат вычисления снова записывает в память. А дальше возникает небольшое различие.
Так называемая гарвардская архитектура говорит, что данные, с которыми работает компьютер, поступают ему по одному каналу, а команды, которые он выполняет — по другому. Это довольно логичное разделение: алгоритм написан один раз, в процессе работы программы обычно не меняется, поэтому давайте сохраним его отдельно. А исходные данные и промежуточные результаты вычислений — отдельно. Примерно как учебник и рабочая тетрадь. Процессор поглядывает то в «книгу», то на свои «выкладки».
Однако оказалось, что эта модель сложновата в реализации, поэтому современные компьютеры используют другую архитектуру, принстонскую (она же архитектура фон Неймана). В ней данные и команды не разделяются (ведь можно считать, что команда — это просто частный тип данных). Они хранятся в одной и той же памяти, рядом друг с другом, и поступают в процессор по единому каналу. Это как если бы весь «учебник» мы переписали в «рабочую тетрадь», чтобы процессору не приходилось смотреть в два разных места. Теперь всё идёт вперемешку: команда, данные, команда, данные. Но я не про архитектуры процессоров (в которых мало что понимаю), а про Natural Language Processing (в котором тоже пока не специалист, но учусь).
Так вот, мне кажется, что современные нейросети — особенно в NLP — постепенно переходят с «гарвардской архитектуры» на «принстонскую» в том плане, что в них размывается граница между данными и алгоритмом. Алгоритм я здесь понимаю очень широко — не как фиксированный набор действий, а как путь от входных данных до результата. Это очень вольная трактовка, и всё же…
(3/n)