Сколько данных вам нужно для сверточной нейронной сети?

15

Если у меня есть сверточная нейронная сеть (CNN), которая имеет около 1 000 000 параметров, сколько нужно обучающих данных (предположим, я делаю стохастический градиентный спуск)? Есть ли эмпирическое правило?

Дополнительные примечания: Когда я выполнил стохастический градиентный спуск (например, 64 патча за 1 итерацию), после ~ 10000 итераций точность классификатора может достичь приблизительного устойчивого значения). Значит ли это, что не нужно много данных? Как данные 100k-1000k.

RockTheStar
источник

Ответы:

12

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

Хорошей вещью для проверки будет ошибка (или точность) каждого набора как функция числа итераций. Есть две возможности для результата этого:

1) Ошибка обучения сходится к значению значительно ниже, чем ошибка тестирования. Если это так, производительность вашего алгоритма почти наверняка улучшится с увеличением объема данных.

2) Ошибка обучения и ошибка тестирования сходятся примерно к одному значению (при этом ошибка обучения все еще, вероятно, немного ниже, чем ошибка тестирования). В этом случае дополнительные данные сами по себе не помогут вашему алгоритму. Если вам нужна лучшая производительность, чем вы достигли в данный момент, вы должны попытаться добавить больше нейронов к скрытым слоям или добавить больше скрытых слоев. Если будет добавлено достаточное количество скрытых юнитов, вы обнаружите, что ваша ошибка тестирования станет заметно выше, чем ошибка обучения, и в этот момент поможет больше данных.

Для более подробного и полезного введения в процесс принятия этих решений я настоятельно рекомендую курс Coursera Эндрю Нга , в частности уроки «Оценка алгоритма обучения» и «Уклон против дисперсии».

Кевин Лайонс
источник
3

Наивный ответ - всегда нужно больше данных. Итерирование по одному и тому же набору данных, говоря о большем количестве эпох, поможет вам «уточнить» результат, но вы не улучшите результат настолько, насколько будет иметь больше данных.

В качестве примера я тренирую коннет для моделирования предложений и для проверки, нужны ли мне дополнительные данные, я попытался разбить свой тренировочный набор данных на меньшие подмножества и пытаюсь его протестировать.

Используя весь набор данных и обучение в течение 10 итераций, я получил точность 93% в своем тесте, и он продолжает улучшаться. Вместо этого, когда я итерировал 10% набора данных за 100 итераций, я получил 85%.

Поэтому всегда старайтесь получать больше данных, но если вы не можете этого сделать, то большее количество эпох может быть хорошим компромиссом, но в итоге ваша модель лучше сходится, если вы наполняете сеть всегда новыми данными.

dbonadiman
источник
1
Спасибо за Ваш ответ! Да, я знаю, чем больше у вас данных, тем лучше вы будете, но тогда я точно не знаю, сколько именно данных вам нужно. Потому что не всегда вы можете иметь больше данных. Например, мне нужно нанять кого-нибудь, чтобы делать аннотации и маркировку, я хочу выяснить, когда мне следует остановиться ...
RockTheStar
Означает ли это, если у меня есть небольшой набор данных, моя модель не будет сходиться?
Самсамара
3

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

Как следует из ответа Кевина Л. , имеет смысл рассмотреть разницу между ошибкой обучения и ошибкой тестирования. Если ваши данные тестирования не зависят от ваших данных обучения, это дает представление о том, насколько хорошо ваша модель обобщает данные, которые недоступны. Я хотел бы добавить к этому тот факт, что большая разница между тренировкой и ошибкой тестирования только говорит о том, что ваша модель плохо обобщается, то есть вы перегружены данными обучения. Вероятно, поможет больше данных, потому что теперь сети также необходимо моделировать дополнительные точки данных, и, следовательно, они больше не могут соответствовать этому. Тем не менее, может быть целесообразнее изменить модель, чтобы она лучше обобщалась. Эта глава из отличной книги объясняет, какие существуют виды регуляризации и как их можно применять в сетях для лучшего обобщения.

Если вы искали более количественную меру, я недавно нашел этот вопрос о кворе, Речь идет об авто-кодировщике, но я думаю, что это также должно быть применимо к вашему примеру. Я понятия не имею, правильно ли это (пожалуйста, дайте мне знать), но я бы сказал, что, например, для MNIST можно утверждать, что вы пытаетесь уменьшить изображения с максимальным значением 28 * 28 * 8 * 10 000 = 62 720 000 биты энтропии до десяти классов в однократном кодировании с 10 * 10 * 10 000 = 1 000 000 бит энтропии. Поскольку нас интересует только 1 000 000 бит энтропии на выходе, мы можем сказать, что при 1 000 000 параметров каждый параметр представляет один бит, который составляет 1e-4 бита на выборку. Это означает, что вам нужно больше данных. Или у вас слишком много параметров, потому что, например, при 100 параметрах у вас есть 10 000 бит на параметр и, следовательно, 1 бит на выборку. Тем не мение,

Мистер Цйолдер
источник
Спасибо за ваше предложение. Я думаю, что в настоящее время люди придумывают другую стратегию по сокращению количества данных для конкретной задачи.
RockTheStar
0

Другой метод, который обычно используется для определения того, достаточно ли изучена ваша сеть, - это визуализация начальных фильтров. Если сеть хорошо обучена, она должна отображать плавный фильтр. Шумовой фильтр обычно указывает на то, что сеть недостаточно обучена или что она была перегружена. Для получения дополнительной информации прочитайте эту страницу .

Suhail
источник