Вообще, известный ученый Джеффри Хинтон советовал выбирать НС с количеством скрытых слоёв в районе 3-5 штук. Но сейчас для распознавания объектов на картинках и в текстовых задачах, насколько мне известно, используются очень глубокие (глубина — количество слоёв) сети, с десятками скрытых слоёв. Каждый последующий слой как бы обобщает результаты предыдущего: первый слой распознаёт черточки, второй из черточек — скругления, третий — нос и глаза, четвертый — лицо. Извините, за набивший оскомину пример.
Минимальный размер сети зависит от первоначально выбранных признаков. Самая маленькая возможная сеть — однослойный персептрон, который по сути состоит из всего одного нейрона и может разделять классы точек только с помощью прямой линий. Но при этом если Вы выберете признаки так, что изначально нелинейное распределение точек превратится в линейное, то даже персептрон сможет правильно выполнить его разделение. Это называется «спрямление пространства».
Например, на картинке Вы в качестве признаков выбрали квадраты x1 и x2, а также их произведение. Вы преобразовали пространство признаков из x1 и x2 в другое пространство, где признаков у Вас пять. И поэтому даже «маленькие» сети могут разделять его достаточно быстро.
Отвечая на Ваш вопрос: минимальный размер сети, позволяющий распознать спираль или что угодно — один нейрон, но только если Вы предварительно «спрямите» (преобразуете) пространство признаков в линейно разделимое.
Если Вы дадите только исходные признаки, то многослойная НС может сама с помощью скрытых слоёв это сделать, но для этого ей нужно время.
А почему считают, что у китайской комнаты нет интеллекта? Да, человек, сидящий в ней и исполняющий инструкции, не знает китайского. Но тот, кто создал эти инструкции — определенно знал китайский. И неправильно рассматривать только человека, надо рассматривать комнату в целом, включая и инструкции, и исполнителя — эта система, на мой взгляд, обладает сознанием.
Но я полагаю, не все критерии имеют равный вес. Потому что процесс выбора можно свести к двум шагам — возможно, я ошибаюсь, но это неявно сквозит в середине Вашей статьи и я с этим согласен.
Шаг 1 (критический). В зависимости от предполагаемой популярности проекта и функционала делаем выбор в пользу CMS, фреймворка или чистого языка.
Шаг 2 (не слишком критический, потому что Вы сами говорили о том, что большие проекты можно встретить на самых разных языках): в зависимости от остальных 15 критериев выбираем конкретный язык.
Самое важное выбрать: CMS или писать всё самим, а какая CMS и на каком конкретно языке писать — вопрос важный, но второго плана. Нет? В случае CMS мы тратим десятки тысяч рублей, при самостоятельной реализации с фреймворком — сотни тысяч, без фреймворка — ещё большие сотни тысяч :)
Классно структурировано и разложено по полочкам.
Но, как я понял, Вы измеряете сложность проекта в количестве будущих пользователей. Я предлагаю добавить вторую ось — функциональная сложность. Ведь может быть проект с огромной посещаемостью и относительно простым функционалом (например, сайт смешных коротких цитат) и проект с малой посещаемостью, но ужасающе сложным функционалом (например, внутренние корпоративные веб-системы — мы создаем узкоспециализированную срм как saas-решение). Можно выделить четыре квадранта, в каждом будут свои языковые лидеры: например, сложный функционал и малая посещаемость (как пример, enterprise-сегмент) — хорошо подходят Java и C#, простой функционал и большая посещаемость — Ruby (условно).
А скажите, если бы люди были всем довольны и ходили бы, улыбаясь и восхищаясь, например, плугу: «вау, это плуг! за меня может работать лошадь. Больше ничего и не надо», как далеко ушло бы человечество? Да, мы недовольны, мы можем больше. Мы — люди, мы — покорители вселенной, мы должны создавать новые миры, а Вы призываете удивляться и восхищаться самолетам и радиоволнам? Мы достигли так многого только потому, что мы искали, что мы были недовольны, что нам всего было мало.
Спасибо за Ваш комментарий, из него и из комментария выше про АБС я понял, что надо внимательнее относиться к формулировкам, особенно в «не ИТ-сферах», в которых я не являюсь специалистом (хотя, к слову, я имел в виду космическую станцию МИР и нигде не использовал аббревиатуру МКС). Второе — если Вас задело именно слово «нашей» (что можно предположить судя по Вашему нику) и в силу каких-то причин Вы не можете и не хотите разделить эту принадлежность (я с уважением отношусь к любой позиции), то в целом, это был просто иллюстративный пример, я писал пост про общемировой тренд, безотносительно конкретных стран.
Я не стал писать об ИИ, потому что это отдельная большая тема. Системы ИИ начали разрабатываться очень давно — ещё в 50-х годах прошлого века и первоначальные ожидания были очень радужными, уже тогда были созданы чат-боты, которые могли вести диалог, программы для игры в шашки, в 70-е был пик расцвета экспертных систем и т.д. Но после наступило разочарование. В наши дни возродился интерес к таким областям ИИ, как машинное обучение и распознавание (текста, картинок), благодаря, мне кажется, способности техники обрабатывать огромные объемы — условно, можно «скормить» нейронной сети не тысячи картинок, а миллионы. И я согласен, что текущий интерес к ИИ, как Вы справедливо заметили, однозначно влияет на развитие ИТ, хотя бы потому, что алгоритмы ИИ встраиваются в различные программные системы.
Я не отрицаю технологических достижений, я сам восхищаюсь ими. Я лишь о том, что даже в ИТ, до сих пор развивавшейся сверхбыстро, темпы замедлились. К огромному сожалению, Windows XP от 2001 не воспринимается музейной редкостью, хотя прошло 15 лет. А всего в 2000 году MS-DOS 6.22 уже воспринимался, хотя с момента выхода Windows 95 прошло 5 лет.
Например, на картинке Вы в качестве признаков выбрали квадраты x1 и x2, а также их произведение. Вы преобразовали пространство признаков из x1 и x2 в другое пространство, где признаков у Вас пять. И поэтому даже «маленькие» сети могут разделять его достаточно быстро.
Отвечая на Ваш вопрос: минимальный размер сети, позволяющий распознать спираль или что угодно — один нейрон, но только если Вы предварительно «спрямите» (преобразуете) пространство признаков в линейно разделимое.
Если Вы дадите только исходные признаки, то многослойная НС может сама с помощью скрытых слоёв это сделать, но для этого ей нужно время.
На КДПВ я задал слишком большую скорость обучения — Learning Rate, поэтому на графике потерь так скачут значения.
P.S. Зомби — симпатичная :)
Шаг 1 (критический). В зависимости от предполагаемой популярности проекта и функционала делаем выбор в пользу CMS, фреймворка или чистого языка.
Шаг 2 (не слишком критический, потому что Вы сами говорили о том, что большие проекты можно встретить на самых разных языках): в зависимости от остальных 15 критериев выбираем конкретный язык.
Самое важное выбрать: CMS или писать всё самим, а какая CMS и на каком конкретно языке писать — вопрос важный, но второго плана. Нет? В случае CMS мы тратим десятки тысяч рублей, при самостоятельной реализации с фреймворком — сотни тысяч, без фреймворка — ещё большие сотни тысяч :)
Но, как я понял, Вы измеряете сложность проекта в количестве будущих пользователей. Я предлагаю добавить вторую ось — функциональная сложность. Ведь может быть проект с огромной посещаемостью и относительно простым функционалом (например, сайт смешных коротких цитат) и проект с малой посещаемостью, но ужасающе сложным функционалом (например, внутренние корпоративные веб-системы — мы создаем узкоспециализированную срм как saas-решение). Можно выделить четыре квадранта, в каждом будут свои языковые лидеры: например, сложный функционал и малая посещаемость (как пример, enterprise-сегмент) — хорошо подходят Java и C#, простой функционал и большая посещаемость — Ruby (условно).