"Рабочие часы"

Не забывайте об «ученом» в вашей должности Data Scientist.

Как использование фреймворка экспериментального проектирования может ускорить поиск ошибок и сделать вас более эффективным специалистом по данным

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

У меня был профессор в аспирантуре, который всегда подталкивал нас сдавать все наши задания в формате экспериментального дизайна. В то время я находил это чрезвычайно утомительным, но, оглядываясь назад, теперь понимаю, почему. Это привело меня к структурированному подходу к построению моделей, что также избавило меня от неприятностей. Всякий раз, когда я застреваю, пытаясь обучить нейронную сеть, я спрашиваю себя: «Использую ли я принципы экспериментального дизайна?»

Проблема

Разработка нейронных сетей глубокого обучения, которые точно моделируют проблему, непроста. Такие библиотеки, как Tensorflow, PyTorch и особенно Keras, создают впечатление, что любой может создать нейронную сеть, изучив несколько команд в API библиотеки. Однако эти инструменты могут упростить написание кода для построения нейронной сети, они не учат думать так, чтобы можно было создавать превосходные модели.

Что такое экспериментальный дизайн

Экспериментальный дизайн — это «метод, который позволяет ученым и инженерам эффективно оценивать влияние множества входных данных или факторов на показатели производительности или реакции». [1] На практике для специалистов по данным это означает, что при создании проекта подумайте о том, какие переменные (не обязательно переменные в коде) можно изменить для проверки различных результатов. Другими словами, что можно изменить в модели, чтобы проверить разные результаты.

Как это выглядит на практике?

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

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

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

Затем, используя сформулированную гипотезу, вносите изменения, которые влияют только на одну область модели за раз. После изменения производительность модели должна иметь четкое различие: «вот как производительность модели выглядела до изменения, а вот как она выглядела после». Это важно, потому что если внесено более одного изменения, то неясно, какое изменение привело к изменению общей производительности модели. Изменения, внесенные за пределы того, что было заявлено в гипотезе о влиянии на производительность модели, называются смешивающими факторами.

Расширяя предыдущий пример, где гипотеза включала изменение добавления еще одного слоя, невероятно заманчиво сказать: «Что, если бы я увеличил количество нейронов в дополнение к добавлению слоев, а затем по сравнению с моим исходным уровнем». Сопротивляйтесь этому желанию! Добавление еще одного фактора без полной оценки различных уровней фактора приведет к тому, что вы создадите смешанный фактор.

Есть способы учесть несколько факторов при планировании эксперимента, но это тема для другого поста.

Итог: укажите свои факторы заранее. Не изменяйте то, что не было указано в качестве фактора. И когда вы меняете один фактор, не меняйте другой фактор, не измерив предварительно результат.

Мышление факторами

Каждое изменение, которое может привести к изменению результата, считается фактором. Однако каждый фактор может иметь несколько уровней. Эти факторы, как правило, описываются числом изменяющихся уровней. Продолжая наш пример, если у нас есть 3 слоя в нашей базовой модели, и мы хотим посмотреть, что произойдет, если мы добавим еще один слой, тогда у нас будет план 2x1 (2 для количества уровней в факторе и 1, потому что нет t второй оцениваемый фактор).

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

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

Подведение итогов

Экспериментальный дизайн — отличный способ структурировать эксперименты по науке о данных. Используя факторные эксперименты [2], вы можете оценить изменения в моделях, чтобы перейти к более оптимальным условиям при настройке гиперпараметров. Просто будьте осторожны, чтобы не поддаться искушению внести несколько одновременных изменений, и обязательно избегайте добавления искажающих факторов.

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

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

Источники

[1] https://www.jmp.com/en_us/articles/what-is-experimental-design.html

[2] https://en.wikipedia.org/wiki/Factorial_experiment