Если производную порядка n определять как меру похожести на x^n, то надо перед этим определить, что такое мера похожести и объяснить, почему она разная для разных степеней (или откуда в ряду Тейлора берутся факториалы).
Отсутствие производной у модуля в одной точке и "Брр. Квадрат удобнее." не слишком убедительно хотя бы потому что есть L1-регуляризация, LASSO, LARS и так далее. Гладких функций тоже много, на квадрате свет клином не сошёлся.
Если всю математику можно объяснить «на пальцах», то хотелось бы увидеть статью про то, почему уравнение вида x^n + y^n = z^n не имеет решений в целых числах, отличных от нуля, при n > 2.
Метафора применима к победе Deep Blue над Каспаровым в шахматы, но не в данном случае. AlphaGo не полагается на написанные гроссмейстерами эмпирические функции оценки позиций и не считает ходы вперёд дальше сильных профессионалов. Разработчики AlphaGo не умеют играть в го на этом уровне и вообще не понимают, почему она делает те или иные ходы и как именно она выигрывает. Так что это действительно реальный прорыв в области нейронных сетей.
То же касается и людей. Если вы посмотрите анализ партий матча, там видно, где Фэнь Хуэй проводит «разведку боем» — намеренно делает излишне агрессивные ходы, пытаясь нащупать уязвимости. Пока не нащупал, но слабости там наверняка есть. Мой телефон играет сильнее меня в шахматы, но я знаю один дебют, в котором он всегда делает одну и ту же ошибку и в результате предсказуемо проигрывает.
Есть разница между «уровень просядет» и «не может играть вообще».
Это как сравнивать человека с поездом. Поезд может только по рельсам ездить, человек тоже может по рельсам, а может и в лесу по тропинке идти. Можно по тропинке рельсы проложить и тогда там поезд тоже проедет, только это не говорит о том, что поезд побил человека по проходимости.
Вот только чтобы добраться до этапа самообучения нужно:
1. Отредактировать и заново отладить весь код грубого перебора с альфа-бета отсечкой. Там вряд ли достаточно изменить один #define.
2. Где-то найти огромное количество игр профессионалов на доске 19x18, чтобы на них натренировать нейронную сеть. Учитывая что таких игр скорее всего вообще нет в природе, это будет непросто.
Нет, любой человек, умеющий играть в го, сможет играть на доске любого размера. 9x9 и 13x13 вообще стандартные размеры и используются для обучения и неформальных быстрых игр.
Обратите внимание на то, что я не бросаю вызов даже другому любителю игры в го, не говоря уже о профессионалах — мой уровень совсем низкий и шансов у меня не будет.
Пускай мне вызов бросит. Только не на доске 19x19, а например на доске 19x18.
Подозреваю, что эта самообучающаяся программа-почти чемпион после такого мелкого изменения не сможет даже пару ходов сделать, пока программисты её не перепишут с нуля.
По результатам анализа партий этого матча AlphaGo отстаёт от Ли Седола примерно на один камень. В этот раз должно быть достаточно. Кроме того Ли Седол может найти и эксплуатировать слабости модели. Они есть, машина иногда делает сильные ходы, смысл которых не понимает, поэтому человек может отыграться.
Другое дело что теперь уже точно ясно, что победа машины над человеком в го — вопрос времени, причём весьма небольшого. Пара лет.
Опечатался — должно было быть «Если шум отнимается от сигнала, то меньше вероятность перевалить через порог статистической значимости и попасть в публикацию».
Допустим, сигнал равен 1, шум может быть +1 или -1 с равной вероятностью, и у нас одно наблюдение. Если шум +1, мы намеряли 2 и опубликовали. Если шум -1, мы намеряли 0 и не опубликовали. Среднее по экспериментам 1, среднее по публикациям 2.
Если шум отнимается от сигнала, то меньше вероятность перевалить через порог статистической значимости и не попасть в публикацию. Матожидание у шума нулевое, но мы-то усредняем не по всем случаям, а только по тем, которые были опубликованы (то есть оказались статистически значимыми — далекими от нуля).
Кроме упомянутой неприятности с фильтрованием результатов по статистической значимости есть и другая загвоздка: если результат статистически значим, то он скорее всего переоценён.
Представим себе, что наш эксперимент измеряет величину настоящего эффекта на фоне шума. Если шум сложился с сигналом, результат с большей вероятностью перевалит через порог статистической значимости. Ужесточение порога при этом не поможет, а как раз наоборот — будет только хуже.
Помогает только репликация, причём другой лабораторией и с размером выборки в два с половиной раза больше.
Более простой вариант (с двумя трубами) спрашивали на собеседовании. Надо было нарисовать вид сверху при условии что обе трубы в горизонтальной плоскости.
> Не то, на чем бы я хотел акцентировать внимание в этой статье.
Это как раз понятно, просто больше придраться было не к чему. А на подобные грабли я лично наступал, правда в другом генераторе. Вероятность такого события мала, зато генератор вызывается много раз, а одно отсутствующее значение может испортить весь долгий расчёт.
> Если бы в решении этой задачи (генерации ПСЧ) все было бы так просто,
Сейчас там действительно уже всё просто — если не известно, какой алгоритм использует стандартная библиотека, то надо на всякий случай взять готовую реализацию любого современного алгоритма (Mersenne Twister, PCG32) или блочного шифра (ChaCha20, Speck). Они все гарантированно проходят все тесты и отличаются только сложностью реализации и скоростью работы.
Преимущество PCG32 и Speck в том, что их реализация укладывается в несколько строчек, поэтому не нужно тянуть новую зависимость.
> то было бы ровно одно решение.
Не обязательно. Много решений существует по историческим причинам из из-за синдрома «изобретено не здесь». Языков человеческих вон тоже много существует, хотя они все одну и ту же функцию выполняют и примерно с одинаковым успехом.
Аналогичные грабли возникают, когда нужны случайные числа в плавающей точке, а ГПСЧ возвращает целые числа. Появляется желание просто поделить на RAND_MAX, но при этом есть неожиданные тёмные углы.
Если производную порядка n определять как меру похожести на x^n, то надо перед этим определить, что такое мера похожести и объяснить, почему она разная для разных степеней (или откуда в ряду Тейлора берутся факториалы).
Отсутствие производной у модуля в одной точке и "Брр. Квадрат удобнее." не слишком убедительно хотя бы потому что есть L1-регуляризация, LASSO, LARS и так далее. Гладких функций тоже много, на квадрате свет клином не сошёлся.
Если всю математику можно объяснить «на пальцах», то хотелось бы увидеть статью про то, почему уравнение вида x^n + y^n = z^n не имеет решений в целых числах, отличных от нуля, при n > 2.
То же касается и людей. Если вы посмотрите анализ партий матча, там видно, где Фэнь Хуэй проводит «разведку боем» — намеренно делает излишне агрессивные ходы, пытаясь нащупать уязвимости. Пока не нащупал, но слабости там наверняка есть. Мой телефон играет сильнее меня в шахматы, но я знаю один дебют, в котором он всегда делает одну и ту же ошибку и в результате предсказуемо проигрывает.
Это как сравнивать человека с поездом. Поезд может только по рельсам ездить, человек тоже может по рельсам, а может и в лесу по тропинке идти. Можно по тропинке рельсы проложить и тогда там поезд тоже проедет, только это не говорит о том, что поезд побил человека по проходимости.
1. Отредактировать и заново отладить весь код грубого перебора с альфа-бета отсечкой. Там вряд ли достаточно изменить один #define.
2. Где-то найти огромное количество игр профессионалов на доске 19x18, чтобы на них натренировать нейронную сеть. Учитывая что таких игр скорее всего вообще нет в природе, это будет непросто.
В результате получится вообще другая программа.
Обратите внимание на то, что я не бросаю вызов даже другому любителю игры в го, не говоря уже о профессионалах — мой уровень совсем низкий и шансов у меня не будет.
Подозреваю, что эта самообучающаяся программа-почти чемпион после такого мелкого изменения не сможет даже пару ходов сделать, пока программисты её не перепишут с нуля.
Другое дело что теперь уже точно ясно, что победа машины над человеком в го — вопрос времени, причём весьма небольшого. Пара лет.
Допустим, сигнал равен 1, шум может быть +1 или -1 с равной вероятностью, и у нас одно наблюдение. Если шум +1, мы намеряли 2 и опубликовали. Если шум -1, мы намеряли 0 и не опубликовали. Среднее по экспериментам 1, среднее по публикациям 2.
Представим себе, что наш эксперимент измеряет величину настоящего эффекта на фоне шума. Если шум сложился с сигналом, результат с большей вероятностью перевалит через порог статистической значимости. Ужесточение порога при этом не поможет, а как раз наоборот — будет только хуже.
Помогает только репликация, причём другой лабораторией и с размером выборки в два с половиной раза больше.
Это как раз понятно, просто больше придраться было не к чему. А на подобные грабли я лично наступал, правда в другом генераторе. Вероятность такого события мала, зато генератор вызывается много раз, а одно отсутствующее значение может испортить весь долгий расчёт.
Сейчас там действительно уже всё просто — если не известно, какой алгоритм использует стандартная библиотека, то надо на всякий случай взять готовую реализацию любого современного алгоритма (Mersenne Twister, PCG32) или блочного шифра (ChaCha20, Speck). Они все гарантированно проходят все тесты и отличаются только сложностью реализации и скоростью работы.
Преимущество PCG32 и Speck в том, что их реализация укладывается в несколько строчек, поэтому не нужно тянуть новую зависимость.
> то было бы ровно одно решение.
Не обязательно. Много решений существует по историческим причинам из из-за синдрома «изобретено не здесь». Языков человеческих вон тоже много существует, хотя они все одну и ту же функцию выполняют и примерно с одинаковым успехом.
Зачем изобретать велосипед, когда есть PCG32? Ну или можно взять любой готовый блочный шифр и шифровать им числа от 0 до обеда.