我们知道神经网络的每个层(layer)会对输入数据做如下的转换:
output = relu(dot(W, input) + b)
上面表达式中的W和b都是张量数据(tensor),它们代表这个神经网络层的属性,也被称作权重(weights)。这些权重数据就是神经网络通过学习训练数据而获得的。
在神经网络开始学习的时候,这些权重信息只是一些随机数,这一步被称作随机初始化(random initialization)。在这一步,神经网络层处理出来的输出数据没有太大的意义,但是作为学习的起点。在接下来的过程中,神经网络会根据一个反馈信号慢慢调整这些权重,而这个调整过程就是我们常说的“训练”或“学习”过程,这也是机器学习中最重要的一个环节。
这个训练过程可以根据需要重复多次,但其中的步骤包括:
经过多次重复上面的过程,你最终会得到一个把损失值最小化的神经网络。当然这个“最小化”的损失值是针对训练数据而言,我们希望在处理新数据的时候这个损失值仍然很小,否则就是大家常说的overfitting。我们现在先不探讨overfitting以及解决的办法,过后我们会专门讨论这个话题。
上面的前3步都比较容易实现,但是第4步的实现不是那么直截了当。如果我们天真的想每次调整一个参数(其他参数全部冻结),看看如何调整才能降低损失值。看起来这是个可行的办法,但是在实现起来,这个方法非常低效,因为它需要大量的运算才能完成。另外一个方法是利用导数(derivative)的知识来计算损失函数针对每个参数的梯度(gradient),然后沿着梯度相反的方向调整参数就可以降低损失值。如果你还不能理解为什么,我们会在下一次读书笔记中详细讨论这个问题。
Deep Learning with Python 读书笔记(三)神经网络的引擎:梯度优化
原文:https://www.cnblogs.com/jointech/p/12343925.html