python神经网络自动优化_Deep Learning with Python 读书笔记(三)神经网络的引擎:梯度优化...

我们知道神经网络的每个层(layer)都会对输入数据做如下的转换:

output = relu(dot(W, input) + b)

上面表达式中的W和b都是张量数据(tensor),它们代表这个神经网络层的属性,也被称作权重(weights)。这些权重数据就是神经网络通过学习训练数据而获得的。

在神经网络开始学习的时候,这些权重信息只是一些随机数,这一步被称作随机初始化(random initialization)。在这一步,神经网络层处理出来的输出数据没有太大的意义,但是作为学习的起点。在接下来的过程中,神经网络会根据一个反馈信号慢慢调整这些权重,而这个调整过程就是我们常说的“训练”或“学习”过程,这也是机器学习中最重要的一个环节。

这个训练过程可以根据需要重复多次,但其中的步骤包括:

从训练数据集中抽取一批(batch)训练数据x和它们相对应的标签数据y

在神经网络中运行处理这些数据并获得相应的预测数据y_pred

计算这批数据预测结果的损失值(loss value),这个损失值代表预测数据y_pred和y之间的偏差

调整这个神经网络层的权重数据,使得损失值会进一步降低

经过多次重复上面的过程,你最终会得到一个把损失值最小化的神经网络。当然这个“最小化”的损失值是针对训练数据而言,我们希望在处理新数据的时候这个损失值仍然很小,否则就是大家常说的overfitting。我们现在先不探讨overfitting以及解决的办法,过后我们会专门讨论这个话题。

上面的前3步都比较容易实现,但是第4步的实现不是那么直截了当。如果我们天真的想每次调整一个参数(其他参数全部冻结),看看如何调整才能降低损失值。看起来这是个可行的办法,但是在实现起来,这个方法非常低效,因为它需要大量的运算才能完成。另外一个方法是利用导数(derivative)的知识来计算损失函数针对每个参数的梯度(gradient),然后沿着梯度相反的方向调整参数就可以降低损失值。如果你还不能理解为什么,我们会在下一次读书笔记中详细讨论这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值