问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

详解minibatch梯度下降:如何用每个输入数据更新权重?

创作时间:
作者:
@小白创作中心

详解minibatch梯度下降:如何用每个输入数据更新权重?

引用
CSDN
1.
https://blog.csdn.net/qq_20289205/article/details/79911540

在深度学习中,minibatch梯度下降是一种常用的优化算法,它介于批量梯度下降和随机梯度下降之间,通过小批量数据来更新模型权重。本文将通过一个具体例子,详细解释在minibatch中如何计算梯度并更新权重。

1. 提出问题

已知有一个size为k的minibatch,把它扔进神经网络之后,经过一系列变化,网络中的权重weights就会更新。但是,具体是怎么样更新的呢?

2. 解答

假设有5个权重,然后我们的mini batch 大小是2(里面有两个数据x1,x2),扔到神经网络之后,会先对每一个数据求出loss (l1, l2),然后,针对每一个数据对应的loss,各自求五个权重的梯度:

  • 数据1(x1): Loss = l1, gradients1=(1.5,−2.0,1.1,0.4,−0.9)
  • 数据2(x2): Loss = l2, gradients2=(1.2,2.3,−1.1,−0.8,−0.7)

如果要求五个权重的梯度,实际上是求上面两个数据所求出来的梯度(gradients1, gradients2) 的平均值:

gradients_result = ( gradients1, gradients2)/2 = (1.35, 0.15, 0, -0.2, -0.8)

具体到公式:

其中,L是loss,w是权重,w的下标j是指第几个权重(有五个权重的话,j就等于1,2,3,4,5),k是mini batch的大小, i就是指mini batch里第几个数据啦(这里有两个数据,那么i等于1,2)。

值得一提的是,我们可以推出:

因此,就有:

相对于之前的“先对每个例子的loss(l1, l2)求导得到梯度(gradients1, gradients2),然后求这些梯度的平均值”,上面的公式首先求所有loss的平均值,再对这个平均值求相对于权重(weights)的梯度。计算上简单了一些。

TensorFlow就是这样做的。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号