Machine Learning против Deep Learning - честный спарринг )))
Доброй ночи, коллеги! Как я писал в предыдущем посте, недавно я стал счастливым обладателем подписки ChatGPT Pro. В связи с этим счастливым событием решил потестировать Canvas. Если кто не в курсе — это такая крутая диалоговая штука, которая в числе прочего может писать программы и даже их компилировать в законченные приложения. И вот я решил потренировать Canvas в написании кода для глубокого обучения нейронной сети прямого распространения (обычный Deep Learning, без этих всяких CNN, RNN, трансформеров и прочей ереси). Написал промпт для генерации кода на Matlab (моя любимая энжина для математических расчетов и экспериментов, как говорят в МГИМО: whom how). Смысл задачи — предсказание знака следующего приращения цены (по набору предыдущих приращений). Canvas попыхтел минуту и выдал короткий код с использованием вызовов функций из Deep Learning Toolbox. Он сразу заработал. Но мы не ищем легких путей. Модель o1 умеет рассуждать — пусть рассуждает. И я дал ей задание написать код с нуля (без Toolboxes) — чисто метод сопряженных градиентов (adjusted gradients) и обратное распространение ошибки (back propagation). Пороговая функция tanh(x). Все по классике, короче. Canvas попыхтел минуту и выдал длинный код, который… не заработал. При этом код достаточно элегантный (с виду), там, где я использую 3-х мерный массив для набора матриц, эта эстетская шляпа построила cell array из матриц. Гораздо медленнее, но красивее визуально с т.зр. формул. Ошибки при этом она сделала во всем, в чем можно. Неправильная инициализация, неправильная обработка выходного слоя и (sic!) обратный порядок перебора слоев в back propagation. Я тоже, бывает, косячу в программах, но такой лютый трэш не пишу... Чистый эксперимент — это чистый эксперимент. Я специально не стал исправлять ошибки сам, а начал указывать на них Canvas — и оно начало их исправлять. Бинго — 5 итерация — готова жутко медленная нейросетка, которая работает правильно. Допустим — подумал я. И предложил «оно» переписать код, чтобы она предсказывала не знак будущего приращения цены, а само будущее приращение цены. И тут начался лютый п@здец... Все, что надо было сделать — это убрать активацию tanh(x) из выходного слоя. «Оно» накосячило в размерности и никак не реагировало на все мои указания исправить ошибку. Я плюнул через 25 итераций, когда понял, что это бесполезно. При этом каждый раз она писала в рассуждениях: «я нашла ошибку, я ее исправила, теперь я гарантирую, что все размерности соблюдены корректно». (для тех, кому интересно — «оно» не сообразило, что в выходном слое 1 нейрон, а в скрытых слоях всегда больше, чем 1, и честно пыталась перемножить несовместимые по размерности матрицы). Когда мне все надоело — я чутка переписал промпт (ну и очистил контекст, чтобы модель не галлюцинировала) и перегенерировал ответ. Бинго — всего после 2-х исправлений прога заработала! КРАТКИЕ ВЫВОДЫ: 1. Canvas (Cursor, ...) очень полезна, когда надо создать код с библиотечными вызовами. Если кто не в курсе — справочник по функциям Matlab — это 16000 страниц, а справочник по Deep Learning Toolbox то ли 8000, то ли 9000 страниц (пишу по памяти, у меня электронные издания 2022 г.) 2. Canvas абсолютно бесполезна, если вы не понимаете, что за код она генерит. А код она генерит эстетский и замысловатый, так что править его достаточно трудно (хотя он хорошо откомментирован) 3. Если вы не понимаете, что за код она генерит, дальнейшие усилия по приведению кода в работоспособное состояние — это производственный Ад. Как-то так С уважением

Как я писал в предыдущем посте, недавно я стал счастливым обладателем подписки ChatGPT Pro.
В связи с этим счастливым событием решил потестировать Canvas.
Если кто не в курсе — это такая крутая диалоговая штука, которая в числе прочего может писать программы и даже их компилировать в законченные приложения.
И вот я решил потренировать Canvas в написании кода для глубокого обучения нейронной сети прямого распространения (обычный Deep Learning, без этих всяких CNN, RNN, трансформеров и прочей ереси).
Написал промпт для генерации кода на Matlab (моя любимая энжина для математических расчетов и экспериментов, как говорят в МГИМО: whom how).
Смысл задачи — предсказание знака следующего приращения цены (по набору предыдущих приращений).
Canvas попыхтел минуту и выдал короткий код с использованием вызовов функций из Deep Learning Toolbox. Он сразу заработал.
Но мы не ищем легких путей. Модель o1 умеет рассуждать — пусть рассуждает.
И я дал ей задание написать код с нуля (без Toolboxes) — чисто метод сопряженных градиентов (adjusted gradients) и обратное распространение ошибки (back propagation). Пороговая функция tanh(x). Все по классике, короче.
Canvas попыхтел минуту и выдал длинный код, который… не заработал.
При этом код достаточно элегантный (с виду), там, где я использую 3-х мерный массив для набора матриц, эта эстетская шляпа построила cell array из матриц. Гораздо медленнее, но красивее визуально с т.зр. формул.
Ошибки при этом она сделала во всем, в чем можно. Неправильная инициализация, неправильная обработка выходного слоя и (sic!) обратный порядок перебора слоев в back propagation. Я тоже, бывает, косячу в программах, но такой лютый трэш не пишу...
Чистый эксперимент — это чистый эксперимент. Я специально не стал исправлять ошибки сам, а начал указывать на них Canvas — и оно начало их исправлять. Бинго — 5 итерация — готова жутко медленная нейросетка, которая работает правильно.
Допустим — подумал я. И предложил «оно» переписать код, чтобы она предсказывала не знак будущего приращения цены, а само будущее приращение цены. И тут начался лютый п@здец...
Все, что надо было сделать — это убрать активацию tanh(x) из выходного слоя. «Оно» накосячило в размерности и никак не реагировало на все мои указания исправить ошибку. Я плюнул через 25 итераций, когда понял, что это бесполезно. При этом каждый раз она писала в рассуждениях: «я нашла ошибку, я ее исправила, теперь я гарантирую, что все размерности соблюдены корректно».
(для тех, кому интересно — «оно» не сообразило, что в выходном слое 1 нейрон, а в скрытых слоях всегда больше, чем 1, и честно пыталась перемножить несовместимые по размерности матрицы).
Когда мне все надоело — я чутка переписал промпт (ну и очистил контекст, чтобы модель не галлюцинировала) и перегенерировал ответ. Бинго — всего после 2-х исправлений прога заработала!
КРАТКИЕ ВЫВОДЫ:
1. Canvas (Cursor, ...) очень полезна, когда надо создать код с библиотечными вызовами. Если кто не в курсе — справочник по функциям Matlab — это 16000 страниц, а справочник по Deep Learning Toolbox то ли 8000, то ли 9000 страниц (пишу по памяти, у меня электронные издания 2022 г.)
2. Canvas абсолютно бесполезна, если вы не понимаете, что за код она генерит. А код она генерит эстетский и замысловатый, так что править его достаточно трудно (хотя он хорошо откомментирован)
3. Если вы не понимаете, что за код она генерит, дальнейшие усилия по приведению кода в работоспособное состояние — это производственный Ад.
Как-то так
С уважением