Комментарии 16
Любая функция состоит из арифметических или элементарных математических функций
это вы откуда взяли?
На вход функции F (нейросети) подаются входные значения. Происходит последовательное вычисление значений всех промежуточных функций
. В результате получается значение функции F — ответ нейросети, которое передается в функцию ошибки, также называемую функцией потерь. Вычисляется значение функции ошибки.
Как получается значение функции F? Святым духом? Сложением всех fi? Умножением? Преобразованием Лапласа, Фурье или еще как?
Аналитические значения производных для различных операций
Обратите внимание, здесь в качестве производной, полученной на предыдущем шаге, выступает производная относительно самой себя, то есть
.
позвольте поинтересоваться, что есть производная относительно самой себя, аналитически?
Производим все вычисления в том же порядке, как и в ручном расчете. Все производные рассчитаны так же, значит алгоритм работает.
опа. фигак-фигак и в туторал. Что за ручной расчет - бог ведает, выводим какие-то цифирьки и не хуже впаривателя фуфломицинов убеждаем потенциального покупателя что по данным британских ученых производные рассчитаны так же, значит алгоритм работает
это вы откуда взяли?
Это введение в алгоритм автоматического дифференцирования. Здесь говорится о том, что любое преобразование чисел в этом алгоритме основано на арифметических операциях или элементарных функциях. Я не говорю про понятие "функция" в математике, я говорю про понятие "функция" в смысле "преобразование".
Как получается значение функции F?
Происходит последовательное вычисление значений всех промежуточных функций . Берем какое-то число и начинаем его последовательно преобразовывать различными операциями: сложение, умножение и так далее, также мы можем преобразовывать числа элементарными математическими функциями: степенная, логарифмическая и другие. Каждое такое преобразование мы обозначили как
.
+
=
- сложение,
=
- степенная функция,
- композиция функций: деление, сумма, степенная - сигмоида.
позвольте поинтересоваться, что есть производная относительно самой себя, аналитически?
Пусть есть функция , получаем значение функции
, дифференцируем значение этой функции по аргументу:
Заменяем выражение на
, так как
, получаем:
Либо не заменяем, а просто подставляем, так как нужно дифференцировать по выражению, а не по обозначению функции. Таким образом получаем производную значения функции по аргументу, то есть производная аргумента по самому себе.
опа. фигак-фигак и в туторал. Что за ручной расчет - бог ведает, выводим какие-то цифирьки и не хуже впаривателя фуфломицинов убеждаем потенциального покупателя что по данным британских ученых производные рассчитаны так же, значит алгоритм работает
Ну, как ответить на это я не знаю. А что не так с ручным расчетом? Если не верите, то посмотрите код, там используются абсолютно те же самые формулы, что и при ручном расчете, естественно, что результаты будут такими же.
Также в первом абзаце в введении я написал, что, если плохо понимаете правила дифференцирования, то посмотрите мою статью про них. Там рассказано, что такое дифференциал и как раз рассказывается про производную переменной по самой себе, только в виде правила дифференцирования сложной функции.
Это введение в алгоритм автоматического дифференцирования. Здесь говорится о том, что любое преобразование чисел в этом алгоритме основано на арифметических операциях или элементарных функциях. Я не говорю про понятие "функция" в математике, я говорю про понятие "функция" в смысле "преобразование".
дельта-функция - это любая функция или не любая, преобразование или не преобразование? А дискретная функция она на арифметических операциях или элементарных непрерывных функциях основана? А что там будет с производной для таких функций?
Как получается значение функции F?
Происходит последовательное вычисление значений всех промежуточных функций
И, где во всем последующем функция F? Он вообще что? Скаляр, вектор, матрица, тензор, неведомая фигня?
Таким образом получаем производную значения функции по аргументу, то есть производная аргумента по самому себе.
это вы откуда такое взяли? Вот у вас есть функция f = cos(x), что есть производная функции f относительно самой себя?
. А что не так с ручным расчетом?
а что так?
Также в первом абзаце в введении я написал, что, если плохо понимаете правила дифференцирования, то посмотрите мою статью про них. Там рассказано, что такое дифференциал и как раз рассказывается про производную переменной по самой себе, только в виде правила дифференцирования сложной функции.
в статье тупая копипаста из учебников матанализа, только в учебниках матанализа нет производной функции по самой себе, как и производной переменной по самой себе
От меня-то вы что хотите? Если вы лучше меня разбираетесь в математике, то зачем у меня спрашиваете?
Про какие функции вы говорите? Я не понимаю.
это вы откуда такое взяли? Вот у вас есть функция f = cos(x), что есть производная функции f относительно самой себя?
У вас часть текста не отображается что ли? Все понятно вроде написано:
Производная самой функции cos(x) есть в таблице производных, если вы хотите дифференцировать функцию cos(x) по переменной x.
Если производной функции по самой себе нет, тогда откуда появляется единица? Почему x' = 1? Может быть потому, что здесь берется производная по "x"? = dx/dx = 1, разве это не так работает? Дифференциал инвариантен к тому, является ли переменная числом или функцией, поэтому можно дифференцировать по функции или по переменной.
В выражении, которое вы обозначили как "f=cos(x)", буква "f" является обозначением функции cos(x), она не является самой функцией. Точно так же я обозначаю нейросеть через букву "F". Здесь не имеет значения, каким образом выглядит нейросеть изнутри. Сформулируйте вопрос конкретно, что вы хотите чтобы я вам показал или рассказал. Как выглядит нейросеть в виде функции показать?
только в учебниках матанализа нет производной функции по самой себе, как и производной переменной по самой себе
Тогда как называется это явление? Что такое единица в выражении "x' = 1", откуда она там появляется? Потому что в школе так сказали? Я это называю так, может быть это как-то по-другому называется в математике?
Если я ошибаюсь, то скажите в чем именно. Если хотите что-то спросить, то просто спросите, но сначала сформулируйте свой вопрос, чтобы я смог понять. Я вас не понимаю, попробуйте описать то, что вы хотите узнать как-то по-другому
Ворвусь в спор, так сказать.
У производной есть привычное определение через предел:
КасательноОна равна одному только потому, что если мы в верхнюю формулу подставим
то получим — один. Да,
в данном случае и мы его можем подставить, но лучше пользоваться понятной и привычной формулой или уточнять этот момент.
По поводу:
Это отношение производной функциик ней же, вот почему.
Просто такое обозначение в контексте правил дифференцирования некорректно.
Ведь какой бы функцией не была $z$, всегда будет равняться 1. Поэтому эта вещь в формулах явно создает путаницу.
Статья классная и интересная до того момента пока математики не сцепились в комментариях... От этого стало ещё интереснее и менее понятно для не математика.
А можно начать с простого – зачем здесь глубокое обучение?
Я бы понял, если бы вы решали задачу интегрирования. Она сложная. Но deep learning для дифференцирования – это просто отопление дома.
Это в другую сторону работает)
В смысле, у него не было цели решить задачу, была цель показать, что он умеет в deep learning? Или в смысле сложную задачу он бы так не смог решить?
В смысле, что когда вы обучаете нейросетевую модельку на любом современном фреймворке - будь то pytorch, jax, tensorflow и иже с ними, рано или поздно вы пишете что-то в духе model.fit().
И внутри этого самого model.fit() запускается это самое автоматическое дифференцирование по графу вычислений, про которое и рассказано в статье.
Автоматическое диффренцирование делает "брррррррр", вы получаете градиент по весам.
Как, по-вашему, градиенты считаются-то без этого? Как вы нейронки обучаете без подсчёта градиентов?
---
В этой статье нет "решения задачи дифференцирования через нейронку". Я искренне не понимаю, где вы это увидели вообще и почему в разных ветках комментариев повторяете, якобы оно там есть.
Ну, я рассматриваю алгоритм автоматического дифференцирования в контексте глубокого обучения
Забудьте. Ваши статьи не для этой аудитории (здесь нет математиков). Но это не значит, что сюда не следует писать.
Максимум, что получите - критику, с "объяснением" почему у Вас не так.
( К примеру, здесь уважаемые хабровчане нашли ошибку в "рассуждениях" Макса Планка (в девичестве - Паули). Рекомендую прочесть. Поучительно: https://habr.com/ru/articles/781786/#comment_26285988 )
По самой статье: роскошна. Алгоритм нейросети отображён композицией функций + как менять эту композицию при т.н. "обучении" :).
Минусы: Фитон (или как его заслуженно называют на сленге - "Петухан"). Язык не подходит. Позволю процитировать себя. Пройдите по ссылкам, оцените источник кода (да, там всегда так писали и пишут - это без вариантов) и элегантность решений:
Друзья, немного мотивирующих новостей.
Как вы знаете, наш стандарт - https://ru.wikipedia.org/wiki/Языково-ориентированное_программирование То есть под класс задач мы делаем язык+виртуальную машину и решаем на нём задачу (только так, и никак иначе).
Для примера посмотрите работу наших коллег из ILL https://en.wikipedia.org/wiki/Institut_Laue–Langevin
Насколько элегантен код на маленьком специализированном язычке для работы с матрицами.
https://github.com/myfoundation/matrix_calc/blob/master/test/cryst.prog
( реализация алгебры в одной из коодинатных систем кристаллографии https://en.wikipedia.org/wiki/Fractional_coordinates )
+
https://github.com/myfoundation/matrix_calc/blob/master/test/tst_multiret.progПоэтому некоторые из вас уже написали свои языки, некоторые - пишут, некоторые на уже 2-м курсе делают так курсовые (язык + решение на нём задачи).
А написание бейсиков: ночью вас разбуди, вы в полудрёме это должны сделать.
https://github.com/myfoundation/ucBasic
Глубокое обучение: Автоматическое дифференцирование. Теория и реализация. С нуля, на Python