NeuroPro

нейронные сети
и анализ данных

Начало
Новости
Услуги
Нейронные сети
Программы
Статьи
Заметки
Ссылки
Вопросы и ответы
Форум
Об авторе / контакты
Заметки

Опечатки в книге Саймона Хайкина "Нейронные сети: полный курс"

С.Хайкин 'Нейронные сети: полный курс'

Свежепереведенный фундаментальный учебник С.Хайкина (переведено второе американское издание 1999г) вполне претендует на звание события 2006 года в российской литературе по нейроинформатике. Но нужно отметить, что перевод хоть и выполнен без явных ляпов, но подстрочные примечания-комментарии переводчиков не помешали бы для уточнения терминологии (поскольку одно и то же может называться в нейроинформатике, статистике и идентификации систем разными словами, то нужно или сводить термины к одной области, или давать списки синонимов - не все же читатели будут обладать широким кругозором). Комментарии могли бы отразить и прогресс в области нейронных сетей, произошедший с момента опубликования англоязычного оригинала. Я надеюсь, что книга будет пользоваться спросом и при допечатке тиража изменения будут внесены. Тем более, что имеется значительное количество опечаток в математических формулах. Исправлениям опечаток главным образом и посвящена данная страничка. Но надо отметить, что я не гарантирую полноту приведенного здесь списка неточностей - книгу читал "по диагонали", урывками и при разной степени внимательности, поэтому что-нибудь мог пропустить (или ошибиться сам).

Хочется поблагодарить Юрия Цоя за дополнения.

Итак, список замечаний, исправлений, опечаток в книге: С.Хайкин "Нейронные сети: полный курс" (версия для печати):

Глава 1

  1. С.32 второй абзац. Только здесь слово "производительность" может пониматься как скорость работы, мощность вычислителя. Далее в книге у "производительности" (performance) будет смыслом точность, качество работы нейросети (например, на с.73 во втором абзаце снизу).
  2. С.35 п.7. "VLSI Implementability" лучше перевести не как "масштабируемость", а как "эффективная реализуемость на СБИС - сверхбольших интегральных схемах".
  3. С.39 стр.7. Слово "spike"-"выброс, импульс" в русскоязычной нейронауке достаточно часто и привычно просто транслитерируется как "спайк".
  4. С.49 название параграфа. Наверно, лучшим был бы термин "ориентированный граф" вместо "направленный граф".
  5. C.76 третий абзац. Вместо ссылки [53] наверно должна быть ссылка на книгу Эшби [73].
  6. С.99 вывод 1. Нужно добавить еще и случай одновременного удовлетворения этих же условий и со знаком "<".
  7. С.105 абзац 2. Нужно вставить слово "видимые" перед (visible).

Глава 2

  1. С.94 сноска 2. Ссылка на [297] скорее всего неправильна, т.к. [297] не книга и по названию особо не подходит.
  2. С.122 последний абзац. Посмеялся над фразой "деформация структуры нейронов": пока внешнее событие сотрясения мозга не устроит, человек это событие и не запомнит. Скорее всего утверждалось, что память реализуется только отключением синаптических входов (окончаний) от щупалец дендритов или переключением с одного щупальца на другое (термины с Рис.1.2 на с.40, поскольку этот рисунок хорошо подходит для иллюстрации). Т.е. мозги наши с вами живые и шевелятся.
  3. С.129 формула (2.39). Вместо х должно быть х.
  4. C.129 формулы (2.40), (2.41), (2.44). Верхний индекс должен быть q вместо m.
  5. C.137 первый абзац и формула (2.61). Е должно быть курсивом. И в формулах (2.64), (2.65), (2.67), (2.68) на с.138 тоже.
  6. С.142 формула (142). После первой стрелки добавить 0.
  7. C.142 последний абзац. Перед последним словом вставить "минус".
  8. C.147 первый абзац. |L|=l. Т.е. переменная l в правой части выражения должна быть дана курсивом (поскольку вариант в книге путает ее с единицей).
  9. С.151 формула (2.90). В верхнюю строку после фигурной скобки вставить F.
  10. C.151 формула (2.91). Вставить " при " перед N.
  11. C.160 последний абзац в сноске. "при небольшом количестве" заменить на "при большом количестве".

Глава 3

  1. С.173 Рис.3.1. Переменные надо дать курсивом в соответствии с принятыми в книге обозначениями, т.к. эти переменные скалярны.
  2. С.176 формулы (3.5), (3.7). Должно быть w* вместо w*.
  3. C.176 последняя строка. Скорее всего нужно ссылаться на [125], хотя в указанной [124] этот вопрос тоже может быть рассмотрен.
  4. С.179 сноска. Должно быть "производная f(w) по w"
  5. С.180 последняя строка перед сноской. Вместо [124] может быть лучше взять [125], а ссылка [854] может быть неверной.
  6. С.184 промежуточное выражение в верхней строке формулы (3.30). Вместо x(n) должно быть x(i)
  7. С.200 абзац после формулы (3.59). Посмеялся над "неравенством Гучи-Шварца". Должно быть всем известное по ВУЗовскому курсу вышки неравенство Коши-Шварца (Cauchy).
  8. С.204 первый абзац раздела 3.10 - про превращение байесовского классификатора в линейный разделитель в условиях гауссовой среды. Имеется в виду условие одинаковости матриц ковариации обоих классов (будет введено в разделе на с.207), но у меня при фразе "гауссова среда" обычно вспоминается обобщенная ситуация двух нормальных распределений с произвольными матрицами ковариации, когда байес может и не вырождаться в линейный разделитель, а давать квадратичную разделяющую поверхность.
  9. С.206 формула (3.77). Далее вместо указанной в формуле λ несколько раз в тексте и на рис.3.10 будет напечатана Λ.
  10. С.216 задача 3.11. То, то дано в верхнем пределе суммы, должно быть перенесено под знак суммы (а минус можно вынести и перед сумму). Также в абзаце после этой формулы вместо wTx должно быть wTx

Глава 4

  1. С.220 п.1 последнее предложение. Непонятна "биологическая мотивированность" логистической функции.
  2. С.221 первый абзац. Ссылка на [458] может быть неверна.
  3. С.222 последний абзац, С.223 подпись к рис.4.1. Достаточно "странная" фраза: "архитектурный граф". Аналогичное замечание и для рис.4.8 на С.245. В русскоязычной нейроинформатике обычно пользуются термином "структура" вместо "архитектура", хотя это м.б. только субъективное впечатление.
  4. С.223 п.1. Оборвано последнее предложение.
  5. С.223 п.2. Лучше не считать, что нейрон вычисляет сигнал ошибки на основе функции ошибки (т.е. жестко не привязывать целевую функцию к нейрону последнего слоя, как написано в книге), а содержательно разнести эти два объекта. Т.е. лучше думать, что сигнал ошибки поступает на выход сети от внешнего учителя (учитель получает маркировку (эталонные значения) для соответствующих наборов данных, поступающих на вход сети, и оценивает рассогласование между выходом нейронной сети и предписанным значением (эталоном)).
  6. С.224 п.2. Никакой "оценки" нет, вычисляются именно точные (аналитически) значения производных (компонент вектора градиента всей сети, связанных с именно этим нейроном).
  7. С.225 формула (4.2). Исходя из последнего абзаца перед Разделом 4.3 добавляем, что ||C||=mL=M.
  8. C.226 Рис.4.3 и с.227 первый абзац. Изображается и описывается только нейрон выходного слоя, т.к. в рисунок и формулы текста включен расчет ошибки по формуле (4.1).
  9. С.227 абзац после формулы (4.6). "Чувствительностью" обычно считаются частные производные выходного сигнала (или сигналов - в этом случае вместо вектора чувствительностей возникает матрица) по весам синапсов, а не производные функции ошибки по весам синапсов (иначе бы и не стоило заменять слово "градиент" на "чувствительность"). Далее на с.275, с.310-311 Хайкин как раз это и пишет.
  10. С.232 Рис.4.5. Неточно - потеряно домножение на φ'j(vj(n)), нужное исходя из формулы (4.24) на пред.странице.
  11. C.238 формула (4.42). Должно быть Eav(t), где t обозначает номер эпохи (поскольку n относится к примеру выборки, как указано в списке обозначений на с.224).
  12. C.239 абзац 4. Повторяю: нет никакой "оценки" вектора градиента - и последовательный, и пакетный режим вычисляют точный градиент для подвыборки или всей выборки соответственно из одного или всех примеров.
  13. С.240 первый абзац. Доказательство сходимости алгоритма обратного распространения ошибки есть, его Хайкин будет давать на с.277, сопоставляя величину шага обучения с собственными числами матрицы Гессе. Но это только для случая перехода от обучения с постоянным (или релаксирующим) шагом, т.е. метода стохастической оптимизации, к обучению с выбором оптимального шага на каждой эпохе пакетного обучения (т.е. при реализации именно метода наискорейшего спуска)
  14. С.241 Рис.4.7. Граф неполный, включает в себя только расчет локальных чувствительностей и не включает собственно вычисления производных E/∂wij, т.е. обратный проход нарисован не полностью.
  15. C.243 формула (4.46). В нижней строке вместо второй δ должно стоять w (нужно поменять только переменную, а индексы при ней правильны).
  16. С.246 п.1. Никаких вычислительных проблем при расчете (опять же повторяем: точном расчете, а не "оценке", как у Хайкина) якобиана в пакетном режиме на сверхпредставительной (сверхизбыточной) выборке нет. Избыточность расчетов - да, может присутствовать, когда градиент может быть хорошо оценен и по относительно малой случайной подвыборке из большой исходной (дорасчет градиента на остальных примерах выборки относительно мало изменит направление итогового градиента по сравнению с градиентом представительной подвыборки), но это уже другая проблема и другая задача оценки представительности выборки.
  17. С.247 п.3. Надо "асимметричной" вместо "симметричной" (см. название рис.4.10 на с.249 - там правильно).
  18. С.250 Рис.4.11. Правый верхний фрагмент неточный (нужно центрирование и по оси х'1).
  19. C.253 п.3. Лучше скорость обучения каждого нейрона выбирать методом [949] - я и при рассмотрении Раздела 4.17 про это напомню.
  20. С.254 формула (4.52). Опечатка, должно быть F: x из Rm отображается в y из RM
  21. С.256-258 формулы (4.56), (4.57), (4.61), последняя ненумерованная формула на с.257. Вместо μ надо μ
  22. С.258 формула (4.62). Должно быть ||x-xc||2=r2.
  23. C.259 текст после формулы (4.64). Центр в точке xc.
  24. С.261 таблица 4.2 и с.263 таблица 4.3. Левую колонку лучше поименовать "номер эксперимента", а не "количество проходов" (тем более, что количество эпох (просмотров выборки) в таблицах указано явно).
  25. С.264 последнее предложение первого пункта списка. "меньших" заменить на "больших".
  26. С.267 "легенда" рис.4.16. Вместо "параметр обучения, y" должно быть, например, "параметр скорости обучения, η" либо "скорость обучения, η".
  27. С.270 абзац после формулы (4.70). Вместо отсылки к формуле (4.68) надо взять (4.69).
  28. С.271 вторая строка. Вместо ссылки на формулу (4.70) нужна ссылка на (4.71).
  29. С.275 ненумерованная формула. Необычная (на мой взгляд) запись обычной частной производной.
  30. С.276 первый абзац. Якобиан вычисляется в точке w(n), а не x(n). Плюс весь этот абзац - достаточно необычное определение якобиана: стандартно для скалярной функции якобиан - это транспонированный вектор градиента, для вектор-функции (сети с несколькими выходными нейронами) - матрица M*W частных производных, и никакого добавления размерности путем расчетов на каждом примере выборки обычно не делается. Зачем Хайкину нужно было уникальное определение - я не понимаю, т.к. для последовательного режима обучения якобиан версии Хайкина непонятно зачем нужен (ведь постоянно меняется w(n) и будет накоплена просто история мгновенных градиентов по отдельным примерам на протяжении эпохи, которая уже устарела и к полученному в конце эпохи w(n) никакого отношения не имеет), а для пакетного режима можно брать стандартное определение при суммарной целевой функции Eav (накопление информации по примерам выборки как раз и будет сделано при расчете с использованием Eav и никакого добавления размерности к вектору или матрице якобиана не понадобится).
  31. С.279 строка 4 первого абзаца. Вместо "на слишком большом" надо заменить на "на слишком малом"
  32. С.279 первое предложение второго абзаца. Бред переводчиков про "загрузку данных" нужно поменять на предложение наподобие такого: "Обычно причиной переобучения является использование избыточного количества скрытых нейронов". Но и это утверждение остается спорным - см. статью Бартлетта [97], упомянутую в сноске на с.160 как раз по поводу бОльшего влияния свойств синапсов на обобщение, чем избыточности структуры сети.
  33. С.282 теорема. Должно быть: f принадлежит C(Im0).
  34. С.286 предпоследний абзац. Увеличение размерности входных данных должно пониматься здесь как увеличение числа примеров N, а не m0.
  35. С.287 последняя формула. Должно быть φ(f(u)).
  36. С.290 второй абзац. "Число сглаживания" лучше обозвать "числом (порядком) запоминания", а в последнем предложении абзаца вместо "должна увеличиваться" надо взять "должна уменьшаться".
  37. С.290 после формулы (4.92). T'' состоит из rN примеров.
  38. С.293 первый абзац. Вместо [37] должна быть [40].
  39. С.297 абзац с формулой (4.96). Ссылка [458] скорее всего неверна, но у Хинтона вроде действительно была работа на эту тему (не из перечисленных Хайкиным), также формулу (4.96) независимо в 1989 предложили M.Ishikawa (ссылок на него у Хайкина нет) и S.Hanson, L.Pratt (тоже не упомянутая Хайкиным известная работа "Comparing biases for minimal network construction with back-propagation" в первом томе NIPS).
  40. С.298 формула (4.97). Приоритет действительно Румельхарта с кем-то еще, но до выхода [1022] достаточно детально формулу изучил Y.Chauvin (пара статей в первом-втором номере ежегодника NIPS - см. у него перечисление имен и работ, если в [1022] экскурса в историю не сделали).
  41. С.301 абзац после курсивного. Всё делается наоборот (см. и первый абзац на с.302) - сначала удаление удаляемого веса, потом коррекция остальных весов сети.
  42. С.303 формула (4.110). Надо H(n-1) вместо H(n-1).
  43. С.305 таблица 4.6. После п.3 надо повторить шаги 2,3 для всех 1≤nN, т.е. рассчитать гессиан на всей выборке. Далее в п.4 если удаляем вес, то однозначно переходим к шагу 5 (ведь если начнем крутить шаг 4 удаления весов в цикле, то потеряем нужные для формулы на шаге 5 все индексы i кроме последнего), в противном случае - к шагу 6 (ничего не удаляли - корректировать сеть и не нужно) (т.е. нумерация шагов перехода в п.4 у Хайкина уменьшена на единичку по сравнению с нужной, никакого слова "снова" в п.4 не должно быть).
  44. С.307 последний абзац. Обучение сети-репликатора проводится всё же с учителем, т.к. есть однозначные предписания выходных сигналов сети для каждого примера выборки (на Рис.4.23б правильно сказано и нарисовано, что обучение с учителем).
  45. С.310 формула (4.114). Как и на с.275 ранее, необычная (на мой взгляд) запись обычной частной производной.
  46. С.315 эвристика 1. Можно сослаться на [949].
  47. С.316 сноска 14. Ссылка на [439] может быть неправильна.
  48. С.317 предпоследний абзац последнее предложение. Чувствительным к чему?
  49. С.318 критика метода Ньютона. Ну, можно взять псевдоньютон Яна ЛеКуна и Сью Беккер, который быстро и точно считает diag(H), а обращение диагональной матрицы тривиально. Естественно, придется посчитать diag(H) именно методом ЛеКуна-Беккер, аппроксимация H формулой (4.108) и взятие diag не подойдет.
  50. С.318 предпоследний абзац, с.319 первый абзац (про непригодность квазиньютонов для задач большой размерности и отсутствию альтернатив методу сопряженных градиентов). Есть квазиньютоновские методы с ограниченной памятью, требующие затрат памяти на хранение данных порядка O(w), см., например, книгу Гилл, Мюррей, Райт "Практическая оптимизация", если вдруг в процитированных Хайкиным учебниках по методам оптимизации про это не написано.
  51. С.319 формула (4.124). s(n) надо транспонировать.
  52. С.322 формула (4.130). Не понял первое вхождение в фигурных скобках.
  53. С.322 формула (4.133). s(n-1) в числителе надо транспонировать.
  54. С.327 таблица 4.8. Я бы выкинул шаг 4 и критерий останова, остановку (или рестарт метода сопряженных градиентов) делал на шаге 3 при невозможности снизить значение Eav методом выбора шага. А все потенциально опасные (из-за малых норм векторов) места обернул бы при программировании в обработчики исключительных ситуаций, чтобы не налететь на деление на нуль или переполнение. Т.е. никаких констант, использующихся для проверок или завершения обучения, ни пользователь, ни программист не должны вводить - кроме явного указания нужного уровня Eav или нужного уровня ошибки обобщения (ну, или, числа эпох обучения, чтобы никогда не заставлять пользователя ждать до второго пришествия и останавливать обучение после разумного числа итераций). Плюс добавил бы эмпирики более высокого уровня абстракции - для нахождения минимума ошибки обобщения, если она на каждой эпохе обучения контролируется.
  55. С.334 первый пункт списка. Неверно (по крайней мере, не так однозначно). См. вот эту мою статью (pdf-файл, 216кб), цитированные там недавние работы Мартинеза и ЛеКуна, да и в 1998г ЛеКун с соавторами в статье "Efficient backprop" писали противоположное Хайкину.

Мой комментарий к главе: кошмар, новичок в нейронных сетях и методах оптимизации даже после неоднократного прочтения главы и неоднократных проб (целенаправленно или методом тыка) вряд ли правильно сможет запрограммировать обучение нейронной сети методом обратного распространения ошибки. По крайней мере, при рассмотрении только студентов провинциальных технических ВУЗов готов спорить об этом с достаточно высокими ставками. Изложение перемешало в кучу и необходимые, и малонужные вещи, не расставив акцентов и переусложнив изложение (идя подходом "всё или ничего" вместо пошагового дополнения процедур). Плюс много эмпирики. Почему бы не изложить просто методику вычисления градиента сложной функции (нейросеть плюс целевая функция над ее выходом и, при необходимости, и над свойствами нейросети), затем, как в Главе 6, отослать читаталей к методам градиентной оптимизации без ограничений (в Главе 6 отсылка идет к методам квадратичного программирования), и изложить несколько исторических примеров правильных и неправильных подходов к использованию вычисляемого сетью градиента с точки зрения теории градиентной оптимизации и максимизации скорости сходимости (скорости обучения).

Что хотелось бы видеть в главе (или книге) дополнительно. Во-первых, отличные от метода наименьших квадратов целевые функции, особенно для обучения сети-классификатора (например, кросс-энтропийная функция). Во-вторых, более четкое выделение возможности иметь состоящую из нескольких слагаемых целевую функцию: на примере регуляризации по Тихонову через явную минимизацию кроме собственно значения ошибки еще и скалярного квадрата градиента выходных сигналов сети по весам синапсов (совместные работы ЛеКуна и Дракера 1991-92гг), либо на примере метода Flat minina search Хохрейтера и Шмидхубера, либо на примере метода CLearning очистки входных сигналов сети Андреаса Вайгенда с соавторами. В третьих, более детальное расписывание возможности вычисления вторых производных в сети (указанные работы ЛеКуна и Дракера, методы, перечисленных в обзоре [88]). В четвертых, более детальное описание методов вычисления информативности-полезности разных элементов и сигналов в сети (т.е. определение информативности входов, возможности редукции не только синапсов описанными в книге методами, но и редукции целых нейронов, да и для редукции синапсов тоже есть куча других методов). В пятых - явное указание (читатели ведь не сообразят сами) на возможность считать градиент и по входным сигналам сети (для решения обратных задач на нейросетях, обученных решению прямой задачи, для изложения метода CLearning). Плюс для этой и других глав, где встает задача обучения с учителем, детальнее расписать идею кривых обучения (см. мою заметку на эту тему).

Глава 5

  1. С.357 после формулы (5.23). Далее на нескольких страницах E может быть дана курсивом или жирным шрифтом, причем смена формы записи достаточно бессистемна. Правильнее - курсивом, для E(F), Es(F), Ec(F), E(F,h).
  2. С.361 формула (5.31). Вместо нижнего индекса H должно быть H.
  3. С.363 последний абзац. "...линейной комбинацией..." вместо "...линейной суперпозицией...".
  4. С.364 формула (5.43). Убрать 1/λ.
  5. С.367 формула (5.59). σ вместо δ.
  6. С.369 после формулы (5.65). Снова должна быть "линейная комбинация" вместо "линейной суперпозиции".
  7. С.373 третья строка формулы (5.74). Вставить открывающую скобку перед вторым ti.
  8. С.382 формула (5.112). В нижнем пределе суммы дописать "не равно k".
  9. С.390 название раздела 5.12. В русскоязычной науке обычно вместо "регрессии ядра" используются термины "непараметрическая регрессия" (именно так называется этот метод статистики на русском) или "ядерная регрессия" (если переводить "в лоб").
  10. С.393 формула (5.135). Вставить "...для всех...", как в (5.139) на след.стр.
  11. С.399 "средний" абзац. "...алгоритм кластеризации по k-средним...", далее слово "средним" пропускаться больше не будет.
  12. С.403 ненумерованный список. Слишком уж глобальные и однозначные выводы делают авторы из одного эксперимента, хотя во многом согласен.
  13. С.404 первый пункт списка. Не понял, особенно в части "влияния на входные параметры". Скорее, чем больше значение λ, тем меньше влияние данных вообще на итоговые свойства модели.
  14. С.408 первый абзац. Сомнительна ссылка на [435], может быть подойдет [1144].
  15. С.408 строка 6 абзаца 2. "базисной функции" вместо "фундаментальной функции".

Глава 6

  1. С.431 последнее предложение перед разделом 6.4. Не понял "лучшести" предлагаемого выбора через среднее по выборке (да и вроде при этом получить правильное b0 будет нельзя).
  2. С.434 формула (6.35). Индекса i у последнего x быть не должно.
  3. С.435 ненумерованные формулы в теореме Мерсера. Вместо ψ должна быть φ.
  4. С.444 сноска. Фамилия Huber на русский язык раньше переводилась как Хьюбер, а не Габер (например, перевод его книги [492] во времена СССР: Хьюбер, "Робастность в статистике").

Глава 7 (не полностью)

  1. С.459 третья строка сверху. Расшифровка термина "слабый алгоритм обучения" дана на с.467 во втором абзаце сверху.
  2. С.459 ненумерованные подпункты в п.2. Термин "шлюзовая сеть" как перевод термина "gating network" слишком уж корявый, но иного (и при этом хорошего) варианта на русском пока нет. Наверно, лучше было бы использовать термин "взвешивающая сеть", универсальный как для случая жесткого переключения (коэффициенты-множители 0 или 1 для управляемого сигнала), так и для мягкого управления коэффициентом затухания (множителями из диапазона [0,1]).
  3. С.463 п.2. Частицу "не" убираем из этого предложения - дисперсия ансамбля меньше дисперсии отдельных функций.
  4. С.471 первые строки. "Производительность" (напоминаем, что "производительность-performance" здесь понимается не в смысле скорости, а в смысле точности решения и обобщения - см. наш комментарий к с.32) исходного метода усиления тоже зависит от распределений, формируемых в процессе его работы для второго и последующих экспертов.
  5. С.472 таблица 7.2 последняя строка. Должно быть Ffin(x)=...

Библиография

  1. Кучу раз слова application, approximation, approach, applied, support, mapping, applicability, upper написаны с одной p.
  2. [36-37]. Правильное написание фамилии одного из авторов можно увидеть в [195-197].
  3. [40]. Правильная фамилия Мюллера - как у его однофамильца [749].
  4. [88]. Первый автор - Buntine.
  5. [108]. Вышло в том же NIPS, что и [81].
  6. [214]. Последний из авторов правильно назван в [304-305].
  7. [317]. Надо weak вместо week.
  8. [529]. Последний автор правильно назван в [450-452].
  9. [611]. Первый - Landau.
  10. [915]. Это глава в книге [912].
  11. [945-948,1004]. Schölkopf.
  12. [984]. В названии - "... bias term". В дубле [988] написано правильно.
  13. [1045,1049]. В названии - "...gammon".
  14. [1064]. Повтор [1060].

Пополнения следуют (может быть...).