比来这段时光体系性的进修了 BP 算法后写下了这篇进修标记,因为才能有限,如有明显缺点,还请斧正。
什么是梯度降低和链式求导轨则
假设我们有一个函数 J(w),如下图所示。
梯度降低示意图
如今,我们请求当 w 等于什么的时刻,J(w) 可以或许取到最小值。大年夜图中我们知道最小值袈溱初始地位的左边,也就意味着如不雅想要使 J(w) 最小,w的值须要减小。而初始地位的切线的斜率a > 0(也即该地位对应的导数大年夜于0),w = w – a 就可以或许让 w 的值减小,轮回求导更新w直到 J(w) 取得最小值。如不雅函数J(w)包含多个变量,那么就要分别对不合变量求偏导来更新不合变量的值。
所谓的链式求导轨则,就是求复合函数的导数:
4. 避免 Overfitting 的 L1 和 L2正则化是什么。
参考
链式求导轨则
链式求导的例子
神经收集的构造
神经收集由三部分构成,分别是最左边的输入层,隐蔽层(实际应用中远远不止一层)和最右边的输出层。层与层之间用线连接在一路,每条连接线都有一个对应的权重值 w,除了输入层,一般来说每个神经元还有对应的偏置 b。
因为输出层的值与真实的值会存在误差,我们可以用均方误差来衡量猜测值和真实值之间的误差。
神经收集的构造图
除了输入层的神经元,每个神经元都邑有加权乞降获得的输入值 z 和将 z 经由过程 Sigmoid 函数(也等于激活函数)非线性转化后的输出值 a,他们之间的计算公式如下
l 和 l+1 层的神经元
神经元输出值 a 的计算公式
个中,公式琅绫擎的变量l和j表示的是第 l 层的第 j 个神经元,ij 则表示大年夜第 i 个神经元到第 j 个神经元之间的连线,w 表示的是权重,b 表示的是偏置,后面这些符号的含义大年夜体上与这琅绫氰述的类似,所以不会再解释。下面的 Gif 动图可以加倍清跋扈每个神经元输入输出值的计算方法(留意,这里的动图并没有加上偏置,但应用中都邑加上)
动图显示计算神经元输出值
放个例题,会加倍明白一点:
关于为什么线性函数模型表达才能不敷,可以点击这里查看知乎膳绫擎的评论辩论。
sigmoid 函数
可以看到 Sigmoid 函数的值域为 (0,1) ,若对于多分类义务,输出层的每个神经元可以表示是该分类的概率。当然还存在其他的激活函数,他们的用处和优缺点也都各别。
推荐阅读
PHP说简单,然则要精晓也不是一件简单的事。我们除了会应用之外,还得知道它底层的工作道理。懂得PHP底层实现的目标是什么?动态说话要像用好起首得懂得它,内存治理、框架模型值得我们借鉴>>>详细阅读
本文标题:神经网络中 BP 算法的原理与 Python 实现源码解析
地址:http://www.17bianji.com/lsqh/35499.html
1/2 1