文章目录
前言
本篇文章用于记录深度学习当中所有的优化算法。
神经网络当中的优化器是一种用于反向传播算法中的算法,它能够自适应地调整神经网络模型的参数,以使神经网络在训练集上的表现良好。
在深度学习中,我们通常使用反向传播算法更新神经网络的参数。反向传播算法通过计算损失函数对每个参数的偏导数,从而得到每个参数的梯度,然后,我们可以使用梯度下降算法来更新参数,以最小化损失函数。
提示:以下是本篇文章正文内容,下面案例可供参考
一、BGD(Batch Gradent Descent)
二、SGD(Stochastic Gradient Descent)
大多数机器学习或者深度学习算法都涉及某种形式的优化。 优化指的是改变
x
x
x以最小化或最大化某个函数
f
(
x
)
f(x)
f(x)的任务。 我们通常以最小化
f
(
x
)
f(x)
f(x)指代大多数最优化问题。 最大化可经由最小化算法最小化
−
f
(
x
)
-f(x)
−f(x)来实现。
我们要把最小化或最大化的函数称为目标函数或准则,当我们对其进行最小化时,我们也把它成为代价函数、损失函数或误差函数。
假设一个损失函数为:
J
(
(
θ
)
=
1
2
∑
i
=
1
m
(
h
θ
(
x
)
−
y
)
J((\theta)=\frac{1}{2}\sum_{i=1}^{m}(h_{\theta}(x)-y)
J((θ)=21i=1∑m(hθ(x)−y)
其中
h
θ
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
.
.
.
.
+
θ
n
x
n
h_{\theta}=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}....+\theta_{n}x_{n}
hθ=θ0+θ1x1+θ2x2....+θnxn然后要使得最小化它。
注意:这里只是假设,不用知道这个目标函数就是平方损失函数等等,然后肯定有人问既然要最小化它,那求个导数,然后使得导数等于0求出不就好了吗?Emmmm…是的,有这样的解法,可以去了解正规方程组求解。说下这里不讲的原因,主要是那样的方式太难求解,然后在高维的时候,可能不可解,但机器学习或深度学习中,很多都是超高维的,所以也一般不用那种方法。总之,梯度下降是另一种优化的不错方式,比直接求导好很多。
梯度下降:我们知道曲面上方向导数的最大值的方向就代表了梯度的方向,因此我们在做梯度下降的时候,应该是沿着梯度的反方向进行权重的更新,可以有效的找到全局的最优解。这个
θ
i
\theta_{i}
θi 的更新过程可以描述为:
θ
j
:
=
θ
j
−
α
α
(
J
(
θ
)
)
α
θ
j
\theta_{j}:=\theta_{j}-\alpha\frac{\alpha(J(\theta))}{\alpha\theta_{j}}
θj:=θj−ααθjα(J(θ))
α
(
J
(
θ
)
)
α
θ
j
=
α
(
1
2
(
h
θ
(
x
)
−
y
)
)
α
θ
j
\frac{\alpha(J(\theta))}{\alpha\theta_{j}}=\frac{\alpha(\frac{1}{2}(h_{\theta(x)}-y))}{\alpha\theta_{j}}
αθjα(J(θ))=αθjα(21(hθ(x)−y))
=
(
h
θ
(
x
)
−
y
)
x
j
=(h_{\theta}(x)-y)x_{j}
=(hθ(x)−y)xj
[a表示的是步长或者说是学习率(learning rate)]
好了,怎么理解?在直观上,我们可以这样理解,看下图,一开始的时候我们随机站在一个点,把他看成一座山,每一步,我们都以下降最多的路线来下山,那么,在这个过程中我们到达山底(最优点)是最快的,而上面的a,它决定了我们“向下山走”时每一步的大小,过小的话收敛太慢,过大的话可能错过最小值,扯到蛋…)。这是一种很自然的算法,每一步总是寻找使J下降最“陡”的方向(就像找最快下山的路一样)。
当然了,我们直观上理解了之后,接下来肯定是从数学的角度,我们可以这样想,先想在低维的时候,比如二维,我们要找到最小值,其实可以是这样的方法,具体化到1元函数中时,梯度方向首先是沿着曲线的切线的,然后取切线向上增长的方向为梯度方向,2元或者多元函数中,梯度向量为函数值f对每个变量的导数,该向量的方向就是梯度的方向,当然向量的大小也就是梯度的大小。现在假设我们要求函数的最值,采用梯度下降法,结合如图所示:
三、MBGD(Mini-Batch Gradient Descent)
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。