Re[3]: Слои
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 16.05.25 09:22
Оценка: 13 (3) +1
Здравствуйте, Нomunculus, Вы писали:

Н>Ок. То есть в принципе приближенно и грубо любая задача решается одним слоем? Все остальное — улучшение и уточнение?


Это совсем грубо и только в теории. На практике, конечно, нет.

Н>По поводу экспериментов. Качаю тут опенсорсные модели. Некоторые на 4090 тренятся до 7 часов. То есть захотел я 0.001 где-то сменить на 0.002. И вперед — еще 7 часов? Не, ясно что можно уменьшать количество эпох, разрешения, данные и прочее. Но это же рубит результат. Если я изменю 0.001 на 0.002 и это улучшит результат- где гарантия что это же изменение улучшит на другом количестве эпох и при другом разрешении картинок?


Могу только сказать, что 7 часов — это довольно быстро на таком слабом железе и простор для экспериментов. Гарантий никаких нет.

В целом, выделяют два типа людей:

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

2. Пользователи, которым надо взять готовую нейросеть, максимум поменять что-то по мелочи и решить конкретную проблему. Тут решает не столько нейросеть и архитектура, сколько датасет. Это в основном просто программисты (в идеале), небольшое знание Питона, книжка/курсы по нейросетям.

Если ты заходишь в область со стороны пользователей, то, как мне кажется, надо:
— Как можно шире просто пользоваться, брать, обучать, потратить 1-2 недели на архитектуру. Просто приобрести широту взгляда и интуицию.
— Взять несколько базовых статей и реализовать самому в коде по статьям LeNet, AlexNet, ResNet, LSTM, U-Net etc. То есть повторить за исследователями для понимания тонкостей.

Всё, хватит, ты нормальный специалист, который может сделать продукт, понимая как оно устроено.

Но не надо думать, что нейросети — это что-то сильно простое, зачастую за видимой простотой лежат глубокие математически или физические модели, а не просто удачно подобранный стек слоём. Можно прочитать статью о диффузионных моделях, посчитать сколько там только выделенных формул (их 270). Многие не сложные, но понятно, что эту нейросеть вывели математически. Так просто из пользователей в исследователи без нормального понимания математики не перепрыгнуть.
Или взять ResNet — с одной стороны можно прочитать статью об её архитектуре, станет понятно как работают дополнительные связи — вроде всё понятно. С другой стороны, можно прочитать, что авторы вдохновлялись решением дифференциальных уравнений. Ну, типа, ок, мне как пользователю это ничего не даёт, не помогает её обучать или что-то менять.
Отредактировано 16.05.2025 9:26 Nuzhny . Предыдущая версия .
Re: Слои
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 16.05.25 08:24
Оценка: 9 (2)
Здравствуйте, Нomunculus, Вы писали:

Н>1. как выбирают количество слоев? Видимо, наращивают по мере решения? То есть начинают с одного, задача не решается и добавляют другой? Но почему именно добавляют? Вдруг что-то не так именно со слоем, и не надо никакого нового слоя? Или слоев, например, 5. Как решают что нужен 6-ой, а не что-то не так с 5 уже существующими?


Практика: много запусков для тренировки различных вариантов, десятки лет, тысячи исследователей, NAS. Очень много экспериментов, очень, очень много.
Есть ещё несколько правил:
1. Если небольшая сеть хорошо обучилась на твоём датасете, то можно взять сеть больше и она будет работать лучше.
2. Если при этом большая сеть обучилась лучше, то можно её сделать разреженной (пруннинг) так, что она по качеству не просядет.
3. Если сеть становится слишком глубокой, то начинают затухать градиенты. Для этой проблемы придумали когда-то residual connection (Resnet).
4. Всякие batch normalization и ещё множество других трюков.

Н>2. Как выбирают функцию активации? Где-то ReLU, где-то нет. Почему так, а не иначе?


Также эксперименты. Что-то зависит от природы самих данных, что-то подбирают для улучшения производительности. Иногда ReLU или leaky ReLU часто может заменить что-то нелинейное почти без потери в качестве, но сильно быстрее по вычислениям.

Н>3. Как решают сколько входов-выходов у слоев? Ну, вход первого и выход последнего — это ясно. А например, у первого 256 входов, 128 выходов, у второго 128 входов, 32 выхода, у третьего 32 входа, 1024 выходов, у четвертого 1024 входов 8 выходов. С фига ли так? Откуда вообще эти числа?


В целом есть соображение, что чем глубже в нейросеть, тем выше уровень абстракции. Поэтому размер слоёв постепенно сокращается. Кратность к 32 удобна для вычислений, кажется больше ничего особенного в этом нет. Ставят свёртки друг за другом, смотрят соотношение производительность/качество и оставляют удачный вариант.

Н>Например, есть куча видосов автомобильного трафика. Надо определить скорость самой быстрой машины. Ну и пусть есть набор тренировочных данных. То есть для каждого видео и для каждого кадра есть число — скорость самой быстрой машины. Скажите ход мыслей как именно строить сеть? То есть вот такой первый шаг, не получилось — давайте добавим еще один — почему именно такой? Вот это интересно


Ну, это сразу будет обучение с учителем, задача регрессии. По одному кадру скорость не определить, поэтому явно надо делать двойной вход. Надо для каждого кадра одинаковое число свёрток, чтобы извлечь из пикселей признаки, с сырыми пикселями работать нет смысла. То есть пока две подсети работают параллельно. Потом я вспомню, что существует уже похожая архитектура — сиамские нейросети, попробую прикрутить их, изменив последний слой на выдачу скорости, а не меру похожести. Ну и буду смотреть на учится/не учится. Не учится — чаще всего соотношение размер_сети/размер_датасета слишком большое. Надо что-то делать. Совсем не учится никак, тогда буду думать и экспериментировать с подсетями, с итоговвым значением.
Добавка. Вспомнил, что есть ещё сети, получающие на вход два кадра, например, для вычисления оптического потока. Так что я начал бы с них, скорее всего. Почему? Потому что они прямо таки уже содержат в себе большую часть решения. Осталось научиться для каждого вектора определять скорость — вот здесь уже сложнее, потому что это сильно контекстная штука. Возможно, что хорошего качества не получить без дополнительной настройки типа предварительной калибровки камеры, исправления дисторсии и т.д.
Отредактировано 16.05.2025 8:56 Nuzhny . Предыдущая версия .
Слои
От: Нomunculus Россия  
Дата: 16.05.25 06:11
Оценка: 7 (2)
Никак не могу понять как именно выбирается количество слоев, какие именно свертки будут, какие именно функции активации будут и сколько именно входов-выходов будет у каждого слоя. Смотрю опенсорсные сетки. Блин, там по 8-12 слоев. Как они выбрали именно столько и именно эти?
По очереди:
1. как выбирают количество слоев? Видимо, наращивают по мере решения? То есть начинают с одного, задача не решается и добавляют другой? Но почему именно добавляют? Вдруг что-то не так именно со слоем, и не надо никакого нового слоя? Или слоев, например, 5. Как решают что нужен 6-ой, а не что-то не так с 5 уже существующими?
2. Как выбирают функцию активации? Где-то ReLU, где-то нет. Почему так, а не иначе?
3. Как решают сколько входов-выходов у слоев? Ну, вход первого и выход последнего — это ясно. А например, у первого 256 входов, 128 выходов, у второго 128 входов, 32 выхода, у третьего 32 входа, 1024 выходов, у четвертого 1024 входов 8 выходов. С фига ли так? Откуда вообще эти числа?

Давайте рассмотрим пример. Я не прошу нейронку для нее писать. Мне интересен ход мышления. Разобрал уже кучу туториалов и примеров из книжек. Все пишут/говорят как надо, но никто не говорит — а почему именно так.
Например, есть куча видосов автомобильного трафика. Надо определить скорость самой быстрой машины. Ну и пусть есть набор тренировочных данных. То есть для каждого видео и для каждого кадра есть число — скорость самой быстрой машины. Скажите ход мыслей как именно строить сеть? То есть вот такой первый шаг, не получилось — давайте добавим еще один — почему именно такой? Вот это интересно
Re[5]: Слои
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 16.05.25 09:42
Оценка: 7 (2)
Здравствуйте, Нomunculus, Вы писали:

Н>Математику-то, всякие стохастические градиенты и прочие частные производные я как раз понял, там не сложно. Я не понимаю как конкретные задачи решать


Эта математика тоже на уровне пользователя. Нас (я программист по образованию) всему этому учили в вузе ещё 25 лет назад. Но вот в каждом конкретном случае (классификация, детекция, сегментация, рекуррентные сети и т.д.) могут применяться сильно специфичные решения, до которых самому прийти будет не просто, а через множество экспериментов. Неделями или месяцами на достаточно мощных компьютерах с несколькими GPU подбирать архитектуру и параметры для обучения — это нормально, такое бывает. Тратить миллионы рублей на вычислительные мощности — это тоже нормально. Те, кто делает прорывные решения и тренирует большие сети могут тратить миллионы и миллиарды долларов.
Поэтому сейчас пользователи в 99% случаев даже не тренируют сеть с нуля, а берут предобученную и догоняют на своём датасете с минимальными изменениями (типа YOLO для детекции, U-Net для сегментации — оно в каждой кофеварке сейчас).
Или тренируют адаптеры для больших готовых нейросеток. Вот тут очень здорово, что большие модели, натренированные на огромнейших датасетах, уже умеют хорошо извлекать данные, их не надо никак тренировать, достаточно применить технику типа LoRA, чуть дообучить небольшой слой и всё заработает.

Я бы, столкнувшись с новой задачей, поступал именно так: что сделано прямо по теме, что есть похожее, как можно присобачить большую модель. Очень маловероятно, что ты столкнулся прямо таки с совсем новым доменом, где ещё нейросети не использовали и не от чего оттолкнуться.
Re: Слои
От: Sharov Россия  
Дата: 27.05.25 10:38
Оценка: 6 (1)
Здравствуйте, Нomunculus, Вы писали:

Н>Давайте рассмотрим пример. Я не прошу нейронку для нее писать. Мне интересен ход мышления. Разобрал уже кучу туториалов и примеров из книжек. Все пишут/говорят как надо, но никто не говорит — а почему именно так.


Еще добавлю немного.

Вот тут первую половину лекции автор рассказывает про истоки и neocognitron, которым, как я понял, вдохновлялся ЛеКун.
https://www.youtube.com/watch?v=Zp9_s0JAXCI

Про сам Neocognitron:
https://www.youtube.com/watch?v=KAazjZoiCd0

Вообще говоря, мне аналогия с мозгом в НС казалось условной, мол похожи. Но вот видимо в машинном зрении изучение непосредственно зрения легло в основу реальных архитектур. Т.е. не просто вдохновлялись и подсмотрели идею активации,
а буквально копировали 1-в-1.
Кодом людям нужно помогать!
Re: Слои
От: kov_serg Россия  
Дата: 16.05.25 10:13
Оценка: 4 (1)
Здравствуйте, Нomunculus, Вы писали:

Н>Никак не могу понять как именно выбирается количество слоев, какие именно свертки будут, какие именно функции активации будут и сколько именно входов-выходов будет у каждого слоя. Смотрю опенсорсные сетки. Блин, там по 8-12 слоев. Как они выбрали именно столько и именно эти?

Н>По очереди:
Н>1. как выбирают количество слоев?
Методом научного тыка.

Н>2. Как выбирают функцию активации? Где-то ReLU, где-то нет. Почему так, а не иначе?

По необходимому функционалу. Например посмотри как память устроена возможно сразу придёт просветление.

Н>3. Как решают сколько входов-выходов у слоев? Ну, вход первого и выход последнего — это ясно. А например, у первого 256 входов, 128 выходов, у второго 128 входов, 32 выхода, у третьего 32 входа, 1024 выходов, у четвертого 1024 входов 8 выходов. С фига ли так? Откуда вообще эти числа?

Посмотри encoder — decoder там размеры слоёв как раз выбираются целенаправленно для уменьшения размерности.

Н>Мне интересен ход мышления

Обычно строятся изходя из того что такая топология в принципе способна выполнить поставленную задачу, а дальше ищут коэф. или сразу вынимают готовые подсети из обученных сетей которые уже что-то умеют и делают так далее.
https://www.youtube.com/@statquest/videos
Re: Слои
От: Vzhyk2  
Дата: 17.05.25 11:31
Оценка: 4 (1)
Здравствуйте, Нomunculus, Вы писали:

Н>1. как выбирают количество слоев? Видимо, наращивают по мере решения? То есть начинают с одного, задача не решается и добавляют другой? Но почему именно добавляют? Вдруг что-то не так именно со слоем, и не надо никакого нового слоя? Или слоев, например, 5. Как решают что нужен 6-ой, а не что-то не так с 5 уже существующими?

Н>2. Как выбирают функцию активации? Где-то ReLU, где-то нет. Почему так, а не иначе?
Н>3. Как решают сколько входов-выходов у слоев? Ну, вход первого и выход последнего — это ясно. А например, у первого 256 входов, 128 выходов, у второго 128 входов, 32 выхода, у третьего 32 входа, 1024 выходов, у четвертого 1024 входов 8 выходов. С фига ли так? Откуда вообще эти числа?
Про научный тык тебе уже рассказали. И да, именно им и пользуются, причем часто вообще чисто случайно, как муравьи. Вот тебе пример, у меня один раз два сверточных (соответствующих порядку фильтров для реального сигнала), заменили пачку случайных сверток, что были во всех статьях по той теме, причем заменили с улучшением качества распознавания.
На данный момент я не видел ни статей, ни книг, ни каких либо работ по этой теме.
Эта тема уже касается фундаментальной части прикладной математики, а эти направления, как и другие фундаментальные в мире сейчас практически прекращены.
Re: Слои
От: Sharov Россия  
Дата: 17.05.25 23:16
Оценка: 4 (1)
Здравствуйте, Нomunculus, Вы писали:

Н>Никак не могу понять как именно выбирается количество слоев, какие именно свертки будут, какие именно функции активации будут и сколько именно входов-выходов будет у каждого слоя. Смотрю опенсорсные сетки. Блин, там по 8-12 слоев. Как они выбрали именно столько и именно эти?

Н>По очереди:
Н>1. как выбирают количество слоев? Видимо, наращивают по мере решения? То есть начинают с одного, задача не решается и добавляют другой? Но почему именно добавляют? Вдруг что-то не так именно со слоем, и не надо никакого нового слоя? Или слоев, например, 5. Как решают что нужен 6-ой, а не что-то не так с 5 уже существующими?

Кмк, тут надо изучать историю AlexNet, хотя даже, наверное, LeNet из 90-х (или 80-х?) Ле Куна.
Чем они руководствовались. Далее стали делать глубоки сети, т.к. чем больше скрытых слоев, тем более высокоуровневые
признаки может выучивать сеть. Т.н. reception field. Но у глубоких сетей затухает градиент и они не обучаются, поэтому
придумали residual сети, ResNet. Но это как пример одной проблемы, а их там много. Куча компромиссов и т.п. Короче, чем
глубже сеть, тем она круче, но дольше обучается, больше весит, затухает градиент и т.п. проблемы. И в зависимости от задач
народ как-то балансирует.

Н>2. Как выбирают функцию активации? Где-то ReLU, где-то нет. Почему так, а не иначе?


Можно вики почитать или болванчика спросить. Это общие вопросы для НС.

Н>3. Как решают сколько входов-выходов у слоев? Ну, вход первого и выход последнего — это ясно. А например, у первого 256 входов, 128 выходов, у второго 128 входов, 32 выхода, у третьего 32 входа, 1024 выходов, у четвертого 1024 входов 8 выходов. С фига ли так? Откуда вообще эти числа?


Это кол-во каналов для обучаемых светок. Опять же, см. пункт 2.

Н>Давайте рассмотрим пример. Я не прошу нейронку для нее писать. Мне интересен ход мышления. Разобрал уже кучу туториалов и примеров из книжек. Все пишут/говорят как надо, но никто не говорит — а почему именно так.


Может тут будут ответы на вопросы -- https://www.youtube.com/watch?v=2xqkSUhmmXU&list=PLtBw6njQRU-rwp5__7C0oIVt26ZgjG9NI&index=20

или тут (там 3 части):
https://www.youtube.com/watch?v=2XbZ03D0Sf4

Н>Например, есть куча видосов автомобильного трафика. Надо определить скорость самой быстрой машины. Ну и пусть есть набор тренировочных данных. То есть для каждого видео и для каждого кадра есть число — скорость самой быстрой машины. Скажите ход мыслей как именно строить сеть? То есть вот такой первый шаг, не получилось — давайте добавим еще один — почему именно такой? Вот это интересно


Ну тут скорее сети для распознования, сначал распознают номер или что-то там характерное, а дальше выч. скорость.
Камера-то статичная.
Кодом людям нужно помогать!
Re[3]: Слои
От: Sharov Россия  
Дата: 18.05.25 13:45
Оценка: 4 (1)
Здравствуйте, Нomunculus, Вы писали:

Н>Здравствуйте, Nuzhny, Вы писали:

Н>Ок. То есть в принципе приближенно и грубо любая задача решается одним слоем? Все остальное — улучшение и уточнение?

В теории точно так, даже сущ. Universal Approximation Theorem, которая ровно про это, что одним слоем НС можно любую
ф-ию аппроксимировать. https://www.youtube.com/watch?v=wen3221_3gU

Н>По поводу экспериментов. Качаю тут опенсорсные модели. Некоторые на 4090 тренятся до 7 часов. То есть захотел я 0.001 где-то сменить на 0.002. И вперед — еще 7 часов? Не, ясно что можно уменьшать количество эпох, разрешения, данные и прочее. Но это же рубит результат. Если я изменю 0.001 на 0.002 и это улучшит результат- где гарантия что это же изменение улучшит на другом количестве эпох и при другом разрешении картинок?


Безотносительно вопроса, о том и черь, что это для очень богатых возможно, ибо требует кучу ресуросов. Отсюда
и сторительсво каждой крупной корпорацией миниАЭС. Но вообще говоря, есть куча эвристик, типа обучится на меньшем множестве данных и т.д.
Кодом людям нужно помогать!
Re: Слои
От: pva  
Дата: 16.05.25 06:50
Оценка: +1
Здравствуйте, Нomunculus, Вы писали:

Н>Никак не могу понять как именно выбирается количество слоев...

По типовым решениям типовых архитектур.

Н>3. Как решают сколько входов-выходов у слоев?

Вообще, зависит от архитектуры. Увеличение количества входов похоже на zoom in (размазывание признаков по слою), уменьшение — на zoom out.
Посмотри еще по ключевым словам "прунинг" и "дистиляция".

Н>Все пишут/говорят как надо, но никто не говорит — а почему именно так.

Ты не одинок.
Автор: pva
Дата: 14.08.24


Н>Например, есть куча видосов автомобильного трафика. Надо определить скорость самой быстрой машины.

Я бы взял архитектуру на трекинг объектов и скорость вычислял уже по результату детекта и смещению. Либо вообще постарался обойтись без нейронки.
newbie
Re[2]: Слои
От: Нomunculus Россия  
Дата: 16.05.25 07:03
Оценка:
Здравствуйте, pva, Вы писали:

pva>Я бы взял архитектуру на трекинг объектов и скорость вычислял уже по результату детекта и смещению. Либо вообще постарался обойтись без нейронки.


Ну мне эта задача не нужна, просто от балды взял. Нужен именно ход мыслей решения. Поэтому лайфхаки типа уже существующих трекеров — не интересно. В школе же нельзя калькулятором пользоваться
Re[2]: Слои
От: Нomunculus Россия  
Дата: 16.05.25 08:59
Оценка:
Здравствуйте, Nuzhny, Вы писали:


Ок. То есть в принципе приближенно и грубо любая задача решается одним слоем? Все остальное — улучшение и уточнение?

По поводу экспериментов. Качаю тут опенсорсные модели. Некоторые на 4090 тренятся до 7 часов. То есть захотел я 0.001 где-то сменить на 0.002. И вперед — еще 7 часов? Не, ясно что можно уменьшать количество эпох, разрешения, данные и прочее. Но это же рубит результат. Если я изменю 0.001 на 0.002 и это улучшит результат- где гарантия что это же изменение улучшит на другом количестве эпох и при другом разрешении картинок?
Re[4]: Слои
От: Нomunculus Россия  
Дата: 16.05.25 09:26
Оценка:
Здравствуйте, Nuzhny, Вы писали:

Математику-то, всякие стохастические градиенты и прочие частные производные я как раз понял, там не сложно. Я не понимаю как конкретные задачи решать
Re: Слои
От: Pzz Россия https://github.com/alexpevzner
Дата: 17.05.25 17:15
Оценка:
Здравствуйте, Нomunculus, Вы писали:

Н>Никак не могу понять как именно выбирается количество слоев, какие именно свертки будут, какие именно функции активации будут и сколько именно входов-выходов будет у каждого слоя. Смотрю опенсорсные сетки. Блин, там по 8-12 слоев. Как они выбрали именно столько и именно эти?


Я так понимаю, там очень много империки. Т.е., пробуют разные варианты, смотрят, какими особенностями обладает результат.

Со слоями, насколько я понимаю, основная проблема, как их учить. Какие слои наказывать, какие поощрять.

Н>Давайте рассмотрим пример. Я не прошу нейронку для нее писать. Мне интересен ход мышления. Разобрал уже кучу туториалов и примеров из книжек. Все пишут/говорят как надо, но никто не говорит — а почему именно так.


Может, книжку какую почитать?

Мне, например, вот эта понравилась: https://markoff.science/#book

Правда, целиком я её не осилил: слишком много букв...
Re[2]: Слои
От: Нomunculus Россия  
Дата: 17.05.25 17:20
Оценка:
Здравствуйте, Pzz, Вы писали:

Я уж три книжки прочитал. Дело не в теории, а в практике. Для понимания С++ недостаточно прочитать Страуструпа
Re: Слои
От: rm2  
Дата: 17.05.25 23:58
Оценка:
Здравствуйте, Нomunculus, Вы писали:

Н>Никак не могу понять как именно выбирается количество слоев, какие именно свертки будут, какие именно функции активации будут и сколько именно входов-выходов будет у каждого слоя. Смотрю опенсорсные сетки. Блин, там по 8-12 слоев. Как они выбрали именно столько и именно эти?



Чисто эмпирически. нет там пока что серьезной науки за всем этим.
Re: Слои
От: __kot2  
Дата: 18.05.25 14:07
Оценка:
У меня складывается впечатление, что любая нейросеть может быть полносвязной с любым количеством слоев (в том числе все входы и все выходы идут на все слои). Потом всплывает проблема недостатка данных для обучения — вместо генерализации сеть начинает запоминать. Можно просто сократить кол-во нейронов общее до какого-то расчетного значения, которое точно не позволит все запомнить. После идет задача оптимизации скорости обучения и там как раз возникает идея свертки, когда не все со всеми а только области, и тд, множество приемов полученных многими исследованиями
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.