第6章 与学习相关的技巧

6.1 参数的更新

神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题,解决这个问题的过程称为最优化。

SGD

使用参数的梯度,沿梯度方向更新参数,并重复这个步骤多次,从而逐渐靠近最优参数。

数学公式:

W ← W − η ∂ L ∂ W W \leftarrow W-\eta\frac{\partial L}{\partial W} WWηWL

代码:

class SGD:
	def __init__(self, lr = 0.01):
		self.lr = lr
	def update(self, params, grads):
		for key in params.keys():
			params[key] -= self.lr * grads[key]
SGD缺点:

如果函数的形状非均向,搜索路径就会非常抵消

SGD低效的根本原因,梯度的方向并没有指向最小值的方向。

6.1.4 Momentum

动量梯度下降法讲解
数学式表达:

v ← α v − η ∂ L ∂ W W ← W + v v \leftarrow \alpha v - \eta \frac{\partial L}{\partial W} \\ W \leftarrow W + v vαvηWLWW+v

  • 式中。v表示速度, 0 ≤ α < 1 0 \leq \alpha < 1 0α<1,当 α \alpha α等于0 时,动量法等价于小批量随机梯度下降。
class Momentum:
	def __init__(self, lr = 0.01, momentum = 0.9):
		self.lr = lr
		self.momentum = momentum
		self.v = None
	def update(self, params, grads):
		# 初始化
		if self.v is None:
			self.v = {
   }
			for key, val in params.items():
				self.v[key] = np.zeros_like(val)
			
			# 对应上面的公式
			for key in params.keys():
				self.v[key] = self.momentum*self.v[key] - self.lr * grads[key]
				params[key] += self.v[key]

6.1.5 AdaGrad

学习率衰减: 随着学习的进行,使学习率逐渐减小。

  • AdaGrad:会为参加的每个元素适当地调增学习率

数学公式:
h ← h + ∂ L ∂ W ⨀ ∂ L ∂ W W ← W − η 1 h ∂ L ∂ W h \leftarrow h + \frac{\partial L}{\partial W} \bigodot \frac{\partial L}{\partial W} \\ W \leftarrow W-\eta \frac{1}{\sqrt{h}} \frac{\partial L}{\partial W} hh+WLW

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值