При обучении нейрона с учителем мы подаём обучающие сигналы и получаем на выходе результаты. Но при каждом сигнале, входном и выходном, мы получаем результат о степени ошибки в предсказании. Когда мы прошли все обучающие сигналы, мы получили набор (вектор) ошибок, который может быть представлен в виде функции ошибок. Эта функция ошибок зависит от входных параметров (весов) и нам нужно найти веса, при которых эта функция ошибок становится минимальной. Для определения этих весов применяется алгоритм Градиентного спуска, суть которого заключается в постепенном движении к локальному минимуму, а направление движения определяется производной от этой функции и функции активации. В качестве функции активации обычно выбирают сигмойду для обычных сетей или усечённую ReLU для глубоких сетей. Сигмойда на выходе даёт диапазон от нуля до единицы всегда. Усечённая ReLU всё же позволяет при очень больших числах (очень важной информации) на входе передать больше единицы на выход, и тем самым повлиять на слои, идущие после непосредственно следующих. К примеру, точка над чёрточкой отделяет букву L от буквы i, а информация одного пикселя влияет на принятия решения на выходе, поэтому важно не потерять этот признак и передать его на последний уровень. Разновидностей функций активации не так много – их ограничивает требование к простоте обучения, когда требуется взять производную. Так сигмойда f после произвольно превращается в f(1–f), что эффективно. С Leaky ReLu (усечённая ReLu c утечкой) ещё проще, так как она при "x < 0" принимает значение 0, то её проводная на этом участке тоже равна 0, а при "x >=0" она принимает 0,01*x, что при производной будет 0,01, а при x > 1 принимает 1+0,01*x, что для производной даёт 0,01. Вычисление тут вообще не требуется, поэтому обучение происходит намного быстрее, обычно, в пять раз. До сигмойды ещё использовался тангенс, но, он был вытеснен сигмойдой.
Так как на вход функции активации мы подаём сумму произведений сигналов на их веса, то зачастую, нам нужен другой пороговый уровень, отличный от 0,5. Мы можем сместить его на константу, прибавляя её к сумме на входе в функцию активации, используя нейрон смещения для её запоминания. Он не имеет входов и выдаёт всегда единицу, а само смещение задаётся весом связи с ним. Но, для многонейронных сетей он не требуется, так как сами веса предыдущим слоями подгоняются такого размера (меньшими или отрицательными), чтобы использовать стандартный пороговый уровень – это даёт стандартизацию, но требует большего количества нейронов.