机器学习-吴恩达
视频https://study.163.com/course/courseMain.htm?courseId=1004570029
课程也可以看coursera,coursera的作业交不上不知道怎么办狗头
参考笔记https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes
参考视频 哔哩哔哩3blue1brown的视频
第一周
变量定义
m m m 代表训练集中实例的数量
x x x 代表特征/输入变量
y y y 代表目标变量/输出变量
( x , y ) \left( x,y \right) (x,y) 代表训练集中的实例
( x ( i ) , y ( i ) ) ({{x}^{(i)}},{{y}^{(i)}}) (x(i),y(i)) 代表第 i i i 个观察实例
h h h 代表学习算法的解决方案或函数也称为假设(hypothesis)
代价函数
代价函数
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J \left( \theta_0, \theta_1 \right) = \frac{1}{2m}\sum\limits_{i=1}^m \left( h_{\theta}(x^{(i)})-y^{(i)} \right)^{2}
J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2最小
假设函数是样本的函数,以样本为自变量,假设函数的输出值为应变量
代价函数是假设函数参数的函数,以(假设函数的)(变量的系数)参数为自变量,以代价函数的输出值(误差结果)为因变量
此时假设,假设函数中有两个参数,则这两个参数取不同的值会得到不同的代价函数的输出值
对于等高线,相同的椭圆对应的不同(两)参数的组合,计算出的代价函数输出值相同
梯度下降
注意同时更新参数项
对我们之前的线性回归问题运用梯度下降法,关键在于求出代价函数的导数,即:
∂ ∂ θ j J ( θ 0 , θ 1 ) = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \frac{\partial }{\partial {{\theta }_{j}}}J({{\theta }_{0}},{{\theta }_{1}})=\frac{\partial }{\partial {{\theta }_{j}}}\frac{1}{2m}{{\sum\limits_{i=1}^{m}{\left( {{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)}}^{2}} ∂θj∂J(θ0,θ1)=∂θj∂2m1i=1∑m(hθ(x(i))−y(i))2
j = 0 j=0 j=0 时: ∂ ∂ θ 0 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \frac{\partial }{\partial {{\theta }_{0}}}J({{\theta }_{0}},{{\theta }_{1}})=\frac{1}{m}{{\sum\limits_{i=1}^{m}{\left( {{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)}}} ∂θ0∂J(θ0,θ1)=m1i=1∑m(hθ(x(i))−y(i))
j = 1 j=1 j=1 时: ∂ ∂ θ 1 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) ) \frac{\partial }{\partial {{\theta }_{1}}}J({{\theta }_{0}},{{\theta }_{1}})=\frac{1}{m}\sum\limits_{i=1}^{m}{\left( \left( {{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)\cdot {{x}^{(i)}} \right)} ∂θ1∂J(θ0,θ1)=m1i=1∑m((hθ(x(i))−y(i))⋅x(i))
则算法改写成:
Repeat {
θ 0 : = θ 0 − a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) {\theta_{0}}:={\theta_{0}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{ \left({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)} θ0:=θ0−am1i=1∑m(hθ(x(i))−y(i))
θ 1 : = θ 1 − a 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) ) {\theta_{1}}:={\theta_{1}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{\left( \left({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)\cdot {{x}^{(i)}} \right)} θ1:=θ1−am1i=1∑m((hθ(x(i))−y(i))⋅x(i))
}
我们刚刚使用的算法,有时也称为批量梯度下降。实际上,在机器学习中,通常不太会给算法起名字,但这个名字”批量梯度下降”,指的是在梯度下降的每一步中,我们都用到了所有的训练样本,在梯度下降中,在计算微分求导项时,我们需要进行求和运算,所以,在每一个单独的梯度下降中,我们最终都要计算这样一个东西,这个项需要对所有mm个训练样本求和。因此,批量梯度下降法这个名字说明了我们需要考虑所有这一"批"训练样本,而事实上,有时也有其他类型的梯度下降法,不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集
第二周
多特征(变量)假设
支持多变量的假设
h
h
h 表示为:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}
hθ(x)=θ0+θ1x1+θ2x2+...+θnxn,
此时模型中的参数是一个
n
+
1
n+1
n+1维的向量,任何一个训练实例也都是
n
+
1
n+1
n+1维的向量,特征矩阵
X
X
X的维度是
m
∗
(
n
+
1
)
m*(n+1)
m∗(n+1)。
因此公式可以简化为:
h
θ
(
x
)
=
θ
T
X
h_{\theta} \left( x \right)={\theta^{T}}X
hθ(x)=θTX
多元梯度下降
当
n
>
=
1
n>=1
n>=1时,
θ
0
:
=
θ
0
−
a
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
{{\theta }_{0}}:={{\theta }_{0}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{0}^{(i)}
θ0:=θ0−am1i=1∑m(hθ(x(i))−y(i))x0(i)
θ 1 : = θ 1 − a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 1 ( i ) {{\theta }_{1}}:={{\theta }_{1}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{1}^{(i)} θ1:=θ1−am1i=1∑m(hθ(x(i))−y(i))x1(i)
θ 2 : = θ 2 − a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 2 ( i ) {{\theta }_{2}}:={{\theta }_{2}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{2}^{(i)} θ2:=θ2−am1i=1∑m(hθ(x(i))−y(i))x2(i)
特征缩放
在我们面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。
以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
解决的方法是尝试将所有特征的尺度都尽量缩放到-1到1之间。如图:
最简单的方法是令:
x
n
=
x
n
−
μ
n
s
n
{{x}_{n}}=\frac{{{x}_{n}}-{{\mu}_{n}}}{{{s}_{n}}}
xn=snxn−μn,其中
μ
n
{\mu_{n}}
μn是平均值,
s
n
{s_{n}}
sn是标准差。
注意:不要对特征
x
0
x_0
x0进行缩放,因为他恒等于1,是设置的偏移量
学习率 α \alpha α
梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,
我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。
也有一些自动测试是否收敛的方法,例如将代价函数的变化值与某个阀值(例如0.001)进行比较,但通常看上面这样的图表更好。
梯度下降算法的每次迭代受到学习率的影响,如果学习率 a a a过小,则达到收敛所需的迭代次数会非常高;如果学习率 a a a过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。
通常可以考虑尝试些学习率:
α = 0.01 , 0.03 , 0.1 , 0.3 , 1 , 3 , 10 \alpha=0.01,0.03,0.1,0.3,1,3,10 α=0.01,0.03,0.1,0.3,1,3,10
多项式回归
如果我们采用多项式回归模型 在运行梯度下降算法前 特征缩放非常有必要 。
正规方程
利用解析时间,一步求解代价函数的最小值
正规方程不可逆的情况
见笔记
第三周
逻辑回归假设
我们引入一个新的模型,逻辑回归,该模型的输出变量范围始终在0和1之间。
逻辑回归模型的假设是:
h
θ
(
x
)
=
g
(
θ
T
X
)
h_\theta \left( x \right)=g\left(\theta^{T}X \right)
hθ(x)=g(θTX)
其中:
X
X
X 代表特征向量
g
g
g 代表逻辑函数(logistic function)是一个常用的逻辑函数为S形函数(Sigmoid function),公式为:
g
(
z
)
=
1
1
+
e
−
z
g\left( z \right)=\frac{1}{1+{{e}^{-z}}}
g(z)=1+e−z1。
h
θ
(
x
)
=
1
(
1
+
e
−
θ
T
x
)
h_{\theta}(x)=\frac{1}{(1+e^{-{\theta}^Tx})}
hθ(x)=(1+e−θTx)1
目标就是利用给定的数据拟合参数
θ
\theta
θ
对模型的理解: g ( z ) = 1 1 + e − z g\left( z \right)=\frac{1}{1+{{e}^{-z}}} g(z)=1+e−z1。
h
θ
(
x
)
h_\theta \left( x \right)
hθ(x)的作用是,对于给定的输入变量x,根据选择的参数计算输出变量=1的可能性(estimated probablity)即
h
θ
(
x
)
=
P
(
y
=
1
∣
x
;
θ
)
h_\theta \left( x \right)=P\left( y=1|x;\theta \right)
hθ(x)=P(y=1∣x;θ)
例如,如果对于给定的
x
x
x,通过已经确定的参数计算得出
h
θ
(
x
)
=
0.7
h_\theta \left( x \right)=0.7
hθ(x)=0.7,则表示有70%的几率
y
y
y为正向类,相应地
y
y
y为负向类的几率为1-0.7=0.3。
决策边界
在逻辑回归中,我们预测:
当 h θ ( x ) > = 0.5 {h_\theta}\left( x \right)>=0.5 hθ(x)>=0.5时,预测 y = 1 y=1 y=1。
当 h θ ( x ) < 0.5 {h_\theta}\left( x \right)<0.5 hθ(x)<0.5时,预测 y = 0 y=0 y=0 。
根据上面绘制出的 S 形函数图像,我们知道当
z = 0 z=0 z=0 时 g ( z ) = 0.5 g(z)=0.5 g(z)=0.5
z > 0 z>0 z>0 时 g ( z ) > 0.5 g(z)>0.5 g(z)>0.5
z < 0 z<0 z<0 时 g ( z ) < 0.5 g(z)<0.5 g(z)<0.5
又
z
=
θ
T
x
z={\theta^{T}}x
z=θTx ,即:
θ
T
x
>
=
0
{\theta^{T}}x>=0
θTx>=0 时,预测
y
=
1
y=1
y=1
θ
T
x
<
0
{\theta^{T}}x<0
θTx<0 时,预测
y
=
0
y=0
y=0
代价函数
线性回归的代价函数为:
J
(
θ
)
=
1
m
∑
i
=
1
m
1
2
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{1}{2}{{\left( {h_\theta}\left({x}^{\left( i \right)} \right)-{y}^{\left( i \right)} \right)}^{2}}}
J(θ)=m1i=1∑m21(hθ(x(i))−y(i))2 。
即为所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,
但是问题在于,当我们将
h
θ
(
x
)
=
1
1
+
e
−
θ
T
x
{h_\theta}\left( x \right)=\frac{1}{1+{e^{-\theta^{T}x}}}
hθ(x)=1+e−θTx1带入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convexfunction)。
这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。
因此要重新定义新得代价函数,然后使之成为凸函数
重新定义逻辑回归的代价函数为:
J
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{{Cost}\left( {h_\theta}\left( {x}^{\left( i \right)} \right),{y}^{\left( i \right)} \right)}
J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)与
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost\left( {h_\theta}\left( x \right),y \right)
Cost(hθ(x),y)之间的关系如下图所示:
简化代价函数和梯度下降
将上述函数合并成一个函数
J
(
θ
)
=
−
1
m
∑
i
=
1
m
[
y
(
i
)
log
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
J\left( \theta \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}
J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
注意特征缩放的问题
梯度下降见笔记的推导
高级优化
高级优化算法相比梯度下降,速度更快,而且能够适应于大型的机器学习
一些梯度下降算法之外的选择:
除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS)
多分类
设计多个分类器,然后对每个输入计算,送入到多个分类器中,然后计算最大的输出结果
正则化
过拟合
解决过拟合的方法
-
丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如PCA)
-
正则化。 保留所有的特征,但是减少参数的大小(magnitude)。
代价函数
修改代价函数,然后来缩小所有参数
正则项的目标就是让参数相对较好,从而使拟合的模型更简单,而前面的项表示能够更好的拟合数据(训练集的目标)
假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚,并且让代价函数最优化的软件来选择这些惩罚的程度。这样的结果是得到了一个较为简单的能防止过拟合问题的假设:
J
(
θ
)
=
1
2
m
[
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
j
=
1
n
θ
j
2
]
J\left( \theta \right)=\frac{1}{2m}[\sum\limits_{i=1}^{m}{{{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})}^{2}}+\lambda \sum\limits_{j=1}^{n}{\theta_{j}^{2}}]}
J(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2]
注意:
如果选择的正则化参数
λ
\lambda
λ 过大,则会把所有的参数都最小化了,导致模型变成
h
θ
(
x
)
=
θ
0
{h_\theta}\left( x \right)={\theta_{0}}
hθ(x)=θ0,也就是上图中红色直线所示的情况,造成欠拟合。
那为什么增加的一项
λ
=
∑
j
=
1
n
θ
j
2
\lambda =\sum\limits_{j=1}^{n}{\theta_j^{2}}
λ=j=1∑nθj2 可以使$\theta $的值减小呢?
因为如果我们令
λ
\lambda
λ 的值很大的话,为了使Cost Function 尽可能的小,所有的 $\theta $ 的值(不包括
θ
0
{\theta_{0}}
θ0)都会在一定程度上减小。
但若
λ
\lambda
λ 的值太大了,那么
θ
\theta
θ(不包括
θ
0
{\theta_{0}}
θ0)都会趋近于0,这样我们所得到的只能是一条平行于
x
x
x轴的直线。
线性回归正则化
正则化线性回归的代价函数为:
J ( θ ) = 1 2 m ∑ i = 1 m [ ( ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ) ] J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{[({{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})}^{2}}+\lambda \sum\limits_{j=1}^{n}{\theta _{j}^{2}})]} J(θ)=2m1i=1∑m[((hθ(x(i))−y(i))2+λj=1∑nθj2)]
如果我们要使用梯度下降法令这个代价函数最小化,因为我们未对 θ 0 \theta_0 θ0进行正则化,所以梯度下降算法将分两种情形:
R e p e a t Repeat Repeat u n t i l until until c o n v e r g e n c e convergence convergence{
θ 0 : = θ 0 − a 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) ) {\theta_0}:={\theta_0}-a\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{0}^{(i)}}) θ0:=θ0−am1i=1∑m((hθ(x(i))−y(i))x0(i))
θ j : = θ j − a [ 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] {\theta_j}:={\theta_j}-a[\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{j}^{\left( i \right)}}+\frac{\lambda }{m}{\theta_j}] θj:=θj−a[m1i=1∑m((hθ(x(i))−y(i))xj(i)+mλθj]
f o r for for j = 1 , 2 , . . . n j=1,2,...n j=1,2,...n
}
对上面的算法中 j = 1 , 2 , . . . , n j=1,2,...,n j=1,2,...,n 时的更新式子进行调整可得:
θ
j
:
=
θ
j
(
1
−
a
λ
m
)
−
a
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
{\theta_j}:={\theta_j}(1-a\frac{\lambda }{m})-a\frac{1}{m}\sum\limits_{i=1}^{m}{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{j}^{\left( i \right)}}
θj:=θj(1−amλ)−am1i=1∑m(hθ(x(i))−y(i))xj(i)
可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令
θ
\theta
θ值减少了一个额外的值。
正规方程的推导见笔记
逻辑回归正则化
代价函数:
J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}+\frac{\lambda }{2m}\sum\limits_{j=1}^{n}{\theta _{j}^{2}} J(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
梯度下降算法为:
R e p e a t Repeat Repeat u n t i l until until c o n v e r g e n c e convergence convergence{
θ 0 : = θ 0 − a 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) ) {\theta_0}:={\theta_0}-a\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{0}^{(i)}}) θ0:=θ0−am1i=1∑m((hθ(x(i))−y(i))x0(i))
θ j : = θ j − a [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] {\theta_j}:={\theta_j}-a[\frac{1}{m}\sum\limits_{i=1}^{m}{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{j}^{\left( i \right)}}+\frac{\lambda }{m}{\theta_j}] θj:=θj−a[m1i=1∑m(hθ(x(i))−y(i))xj(i)+mλθj]
f o r for for j = 1 , 2 , . . . n j=1,2,...n j=1,2,...n
}
第四周 神经网络
前向传播
其中
x
1
x_1
x1,
x
2
x_2
x2,
x
3
x_3
x3是输入单元(input units),我们将原始数据输入给它们。
a
1
a_1
a1,
a
2
a_2
a2,
a
3
a_3
a3是中间单元,它们负责将数据进行处理,然后呈递到下一层。
最后是输出单元,它负责计算
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)。
注意 h θ ( x ) {h_\theta}\left( x \right) hθ(x)是假设函数
神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。下图为一个3层的神经网络,第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏差单位(bias unit):
a
i
(
j
)
a_{i}^{\left( j \right)}
ai(j) 代表第
j
j
j 层的第
i
i
i 个激活单元。
θ
(
j
)
{{\theta }^{\left( j \right)}}
θ(j)代表从第
j
j
j 层映射到第$ j+1$ 层时的权重的矩阵,例如
θ
(
1
)
{{\theta }^{\left( 1 \right)}}
θ(1)代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第
j
+
1
j+1
j+1层的激活单元数量为行数,以第
j
j
j 层的激活单元数加一为列数的矩阵。例如:上图所示的神经网络中
θ
(
1
)
{{\theta }^{\left( 1 \right)}}
θ(1)的尺寸为 3*4。
对于上图所示的模型,激活单元和输出分别表达为:
a
1
(
2
)
=
g
(
Θ
10
(
1
)
x
0
+
Θ
11
(
1
)
x
1
+
Θ
12
(
1
)
x
2
+
Θ
13
(
1
)
x
3
)
a_{1}^{(2)}=g(\Theta _{10}^{(1)}{{x}_{0}}+\Theta _{11}^{(1)}{{x}_{1}}+\Theta _{12}^{(1)}{{x}_{2}}+\Theta _{13}^{(1)}{{x}_{3}})
a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)
a
2
(
2
)
=
g
(
Θ
20
(
1
)
x
0
+
Θ
21
(
1
)
x
1
+
Θ
22
(
1
)
x
2
+
Θ
23
(
1
)
x
3
)
a_{2}^{(2)}=g(\Theta _{20}^{(1)}{{x}_{0}}+\Theta _{21}^{(1)}{{x}_{1}}+\Theta _{22}^{(1)}{{x}_{2}}+\Theta _{23}^{(1)}{{x}_{3}})
a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)
a
3
(
2
)
=
g
(
Θ
30
(
1
)
x
0
+
Θ
31
(
1
)
x
1
+
Θ
32
(
1
)
x
2
+
Θ
33
(
1
)
x
3
)
a_{3}^{(2)}=g(\Theta _{30}^{(1)}{{x}_{0}}+\Theta _{31}^{(1)}{{x}_{1}}+\Theta _{32}^{(1)}{{x}_{2}}+\Theta _{33}^{(1)}{{x}_{3}})
a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)
h
Θ
(
x
)
=
g
(
Θ
10
(
2
)
a
0
(
2
)
+
Θ
11
(
2
)
a
1
(
2
)
+
Θ
12
(
2
)
a
2
(
2
)
+
Θ
13
(
2
)
a
3
(
2
)
)
{{h}_{\Theta }}(x)=g(\Theta _{10}^{(2)}a_{0}^{(2)}+\Theta _{11}^{(2)}a_{1}^{(2)}+\Theta _{12}^{(2)}a_{2}^{(2)}+\Theta _{13}^{(2)}a_{3}^{(2)})
hΘ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
上面进行的讨论中只是将特征矩阵中的一行(一个训练实例)喂给了神经网络,我们需要将整个训练集都喂给我们的神经网络算法来学习模型。
注意这里是说的特征矩阵中的一行,表示一个训练样本而一个训练样本中会有多种特征,表示为 x 1 , x 2 , . . . x_1,x_2,... x1,x2,...
我们可以知道:每一个 a a a都是由上一层所有的 x x x和每一个 x x x所对应的参数(权重)决定的。
(我们把这样从左到右的算法称为前向传播算法( FORWARD PROPAGATION ))
参数与特征矩阵化,则可表示为
θ
⋅
X
=
a
\theta \cdot X=a
θ⋅X=a
前向传播向量化
注意:逻辑回归模型的假设是: h θ ( x ) = g ( θ T X ) h_\theta \left( x \right)=g\left(\theta^{T}X \right) hθ(x)=g(θTX)
z
(
2
)
z^{(2)}
z(2)表示从第一层到第二层的参数特征矩阵,
a
(
2
)
a^{(2)}
a(2)和
g
(
z
(
2
)
)
g(z^{(2)})
g(z(2))表示第二层的假设函数,也叫作激活函数,最后求得的是一个标量值
我们令
z
(
2
)
=
θ
(
1
)
x
{{z}^{\left( 2 \right)}}={{\theta }^{\left( 1 \right)}}x
z(2)=θ(1)x,
(
θ
(
1
)
{\theta}^{(1)}
θ(1)相当于是从第一层到第二层的参数矩阵,权重矩阵;得到的
z
(
2
)
z^{(2)}
z(2)表示从第一层到第二层的参数特征矩阵)
则
a
(
2
)
=
g
(
z
(
2
)
)
{{a}^{\left( 2 \right)}}=g({{z}^{\left( 2 \right)}})
a(2)=g(z(2))
(注意
a
(
2
)
a^{(2)}
a(2)才是表示第二层的神经元,是根据参数特征矩阵计算出的假设函数(激活函数)输出值)
计算后添加
a
0
(
2
)
=
1
a_{0}^{\left( 2 \right)}=1
a0(2)=1。
(注意对每层神经元都要添加偏置值)
注意:下面计算的仅是三层神经网络(即只有一个中间层)
(注意因为第三层只有一个神经元(输出神经元)所以参数(权重)矩阵
θ
(
2
)
{\theta}^{(2)}
θ(2)只有一行)
(所以参数特征矩阵也只有一行)
然后计算假设函数(激活函数),得到最终的输出
我们令
z
(
3
)
=
θ
(
2
)
a
(
2
)
{{z}^{\left( 3 \right)}}={{\theta }^{\left( 2 \right)}}{{a}^{\left( 2 \right)}}
z(3)=θ(2)a(2),则
h
θ
(
x
)
=
a
(
3
)
=
g
(
z
(
3
)
)
h_\theta(x)={{a}^{\left( 3 \right)}}=g({{z}^{\left( 3 \right)}})
hθ(x)=a(3)=g(z(3))。
这只是针对训练集中一个训练实例所进行的计算。如果我们要对整个训练集进行计算,我们需要将训练集特征矩阵进行转置,使得同一个实例的特征都在同一列里。即:
z
(
2
)
=
Θ
(
1
)
×
X
T
{{z}^{\left( 2 \right)}}={{\Theta }^{\left( 1 \right)}}\times {{X}^{T}}
z(2)=Θ(1)×XT
a
(
2
)
=
g
(
z
(
2
)
)
{{a}^{\left( 2 \right)}}=g({{z}^{\left( 2 \right)}})
a(2)=g(z(2))
注意此时的
X
T
X^T
XT中的每一列表示一个训练样本
综上:
第一层:
a ( 1 ) = x a^{(1)}=x a(1)=x,没有 z ( 1 ) z^{(1)} z(1)和 θ ( 1 ) {\theta}^{(1)} θ(1)
第二层:
z ( 2 ) = θ ( 1 ) ⋅ x z^{(2)}={\theta}^{(1)}·x z(2)=θ(1)⋅x,这个式子相当于 z ( 2 ) = θ ( 1 ) ⋅ a ( 1 ) z^{(2)}={\theta}^{(1)}·a^{(1)} z(2)=θ(1)⋅a(1)
z ( 2 ) = θ ( 1 ) ⋅ x z^{(2)}={\theta}^{(1)}·x z(2)=θ(1)⋅x
a ( 2 ) = g ( z ( 2 ) ) = h θ ( 2 ) a^{(2)}=g(z^{(2)})=h_{\theta}^{(2)} a(2)=g(z(2))=hθ(2)
第 k k k层:
z ( k ) = θ ( k − 1 ) ⋅ a ( k − 1 ) z^{(k)}={\theta}^{(k-1)}·a^{(k-1)} z(k)=θ(k−1)⋅a(k−1)
a ( k ) = g ( z ( k ) ) = h θ ( k ) a^{(k)}=g(z^{(k)})=h_{\theta}^{(k)} a(k)=g(z(k))=hθ(k)注意:
计算第 k k k层中的权重矩阵, θ ( k − 1 ) {\theta^{(k-1)}} θ(k−1)有:num( a ( k ) a^{(k)} a(k))行*num( a ( k − 1 ) + 1 a^{(k-1)}+1 a(k−1)+1)列,即从第 k − 1 k-1 k−1层到 k k k层的权重矩阵 θ ( k − 1 ) {\theta^{(k-1)}} θ(k−1),有第 k k k层神经元的个数的列,有第 k − 1 k-1 k−1层神经元(定义的神经元)+偏置一个神经元的个数的行注意这里没有代价函数的概念
多元分类
输入向量
x
x
x有三个维度,两个中间层,输出层4个神经元分别用来表示4类,也就是每一个数据在输出层都会出现
[
a
b
c
d
]
T
{{\left[ a\text{ }b\text{ }c\text{ }d \right]}^{T}}
[a b c d]T,且
a
,
b
,
c
,
d
a,b,c,d
a,b,c,d中仅有一个为1,表示当前类。下面是该神经网络的可能结构示例:
神经网络算法的输出结果为四种可能情形之一
注意,在监督学习中目标的标签是[1 0 0 0]’;…等
第五周
代价函数
逻辑回归中的代价函数:
J
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{{Cost}\left( {h_\theta}\left( {x}^{\left( i \right)} \right),{y}^{\left( i \right)} \right)}
J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))
带入假设函数
J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J\left( \theta \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]} J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
逻辑回归正则化
J
(
θ
)
=
1
m
∑
i
=
1
m
[
−
y
(
i
)
log
(
h
θ
(
x
(
i
)
)
)
−
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
+
λ
2
m
∑
j
=
1
n
θ
j
2
J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}+\frac{\lambda }{2m}\sum\limits_{j=1}^{n}{\theta _{j}^{2}}
J(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
上述说的是单输出的情况,下面是神经网络中多元分类问题
在多元神经网络中:
\newcommand{\subk}[1]{ #1_k }
h
θ
(
x
)
∈
R
K
h_\theta\left(x\right)\in \mathbb{R}^{K}
hθ(x)∈RK
(
h
θ
(
x
)
)
i
=
i
t
h
output
{\left({h_\theta}\left(x\right)\right)}_{i}={i}^{th} \text{output}
(hθ(x))i=ithoutput
这里等式右边的第一项相当于展开了,相当于每个训练样本有k个输出,一共有m个训练样本
等式右边的第二项,相当于正则项,相当于正则项中的参数就是把所有连线对应的参数都加一块了,
θ
(
l
)
{\theta}^{(l)}
θ(l)表示的是第
l
l
l层到
l
+
1
l+1
l+1层的权重矩阵
(注意:其实上述没错,就是表述的不一样)
反向传播
之前我们在计算神经网络预测结果的时候我们采用了一种正向传播方法,我们从第一层开始正向一层一层进行计算,直到最后一层的 h θ ( x ) h_{\theta}\left(x\right) hθ(x)。
现在,为了计算代价函数的偏导数 ∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial\Theta^{(l)}_{ij}}J\left(\Theta\right) ∂Θij(l)∂J(Θ),我们需要采用一种反向传播算法,也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。
代价函数的偏导数 ∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial\Theta^{(l)}_{ij}}J\left(\Theta\right) ∂Θij(l)∂J(Θ)
(注意这里的代价函数是所有样本的最终代价函数,目标就是使这个函数最小化,本质上因为特征矩阵是不变的,即训练样本,所以影响最终代价函数的就是权重矩阵和偏置值,而求梯度,即求每个参数的梯度就是检查每个参数对该代价函数的影响程度)
(反向传播从直观上看就是对每一个结点(激活神经元)计算误差项 δ i l \delta_{i}^{l} δil,表示第 l l l层的第 i i i个神经元的误差)
我们从最后一层的误差开始计算,误差是激活单元的预测(
a
(
4
)
{a^{(4)}}
a(4))与实际值(
y
k
y^k
yk)之间的误差,(
k
=
1
:
k
k=1:k
k=1:k)。我们用
δ
\delta
δ来表示误差,(注意实际上
a
j
(
4
)
=
(
h
θ
)
j
{a_j^{(4)}}=(h_{\theta})_j
aj(4)=(hθ)j)
则:
δ
(
4
)
=
a
(
4
)
−
y
\delta^{(4)}=a^{(4)}-y
δ(4)=a(4)−y
(注意这是向量化的结果,对单个神经元来说是
δ
j
(
4
)
=
a
j
(
4
)
−
y
j
{\delta}_j^{(4)}=a_j^{(4)}-y_j
δj(4)=aj(4)−yj)
我们利用这个误差值来计算前一层的误差:
δ
(
3
)
=
(
Θ
(
3
)
)
T
δ
(
4
)
.
∗
g
′
(
z
(
3
)
)
\delta^{(3)}=\left({\Theta^{(3)}}\right)^{T}\delta^{(4)}.\ast g'\left(z^{(3)}\right)
δ(3)=(Θ(3))Tδ(4).∗g′(z(3))
其中
g
′
(
z
(
3
)
)
g'(z^{(3)})
g′(z(3))是
S
S
S 形函数的导数,
g
′
(
z
(
3
)
)
=
a
(
3
)
∗
(
1
−
a
(
3
)
)
g'(z^{(3)})=a^{(3)}\ast(1-a^{(3)})
g′(z(3))=a(3)∗(1−a(3))。而
(
θ
(
3
)
)
T
δ
(
4
)
(θ^{(3)})^{T}\delta^{(4)}
(θ(3))Tδ(4)则是权重导致的误差的和。
(这就是这么定义的,直接记就完了,注意这里都是向量化的结果,而不是对单个神经元来说的,注意公式里有一个点乘的概念)
下一步是继续计算第二层的误差:
δ
(
2
)
=
(
Θ
(
2
)
)
T
δ
(
3
)
∗
g
′
(
z
(
2
)
)
\delta^{(2)}=(\Theta^{(2)})^{T}\delta^{(3)}\ast g'(z^{(2)})
δ(2)=(Θ(2))Tδ(3)∗g′(z(2))
因为第一层是输入变量,不存在误差。
我们有了所有的误差的表达式后,便可以计算代价函数的偏导数了,假设
λ
=
0
λ=0
λ=0,即我们不做任何正则化处理时有:
∂
∂
Θ
i
j
(
l
)
J
(
Θ
)
=
a
j
(
l
)
δ
i
l
+
1
\frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta)=a_{j}^{(l)} \delta_{i}^{l+1}
∂Θij(l)∂J(Θ)=aj(l)δil+1
(注意上述公式近似得来的)(记就完事了,推导不知道…)
公式推导过程见:https://blog.csdn.net/qq_29762941/article/details/80343185
(上述是不考虑正则化的情况)
下述是考虑正则化的情况
用
Δ
i
j
(
l
)
\Delta^{(l)}_{ij}
Δij(l)来表示这个误差矩阵。第
l
l
l 层的第
i
i
i 个激活单元受到第
j
j
j 个参数影响而导致的误差。
即首先用正向传播方法计算出每一层的激活单元,利用训练集的结果与神经网络预测的结果求出最后一层的误差,然后利用该误差运用反向传播法计算出直至第二层的所有误差。
在求出了
Δ
i
j
(
l
)
\Delta_{ij}^{(l)}
Δij(l)之后,我们便可以计算代价函数的偏导数了,计算方法如下:
D
i
j
(
l
)
:
=
1
m
Δ
i
j
(
l
)
+
λ
Θ
i
j
(
l
)
D_{ij}^{(l)} :=\frac{1}{m}\Delta_{ij}^{(l)}+\lambda\Theta_{ij}^{(l)}
Dij(l):=m1Δij(l)+λΘij(l)
i
f
j
≠
0
{if}\; j \neq 0
ifj=0
D
i
j
(
l
)
:
=
1
m
Δ
i
j
(
l
)
D_{ij}^{(l)} :=\frac{1}{m}\Delta_{ij}^{(l)}
Dij(l):=m1Δij(l)
i
f
j
=
0
{if}\; j = 0
ifj=0
(大概意思明白了,但是
δ
\delta
δ和
Δ
\Delta
Δ的概念不太清楚)
反向传播的理解
反向传播就是计算
δ
i
l
\delta_{i}^{l}
δil,
δ
j
(
l
)
\delta^{(l)}_{j}
δj(l) 相当于是第
l
l
l 层的第
j
j
j 单元中得到的激活项的“误差”,即”正确“的
a
j
(
l
)
a^{(l)}_{j}
aj(l) 与计算得到的
a
j
(
l
)
a^{(l)}_{j}
aj(l) 的差。
实际是,而
a
j
(
l
)
=
g
(
z
(
l
)
)
a^{(l)}_{j}=g(z^{(l)})
aj(l)=g(z(l)) ,(g为sigmoid函数)。我们可以想象
δ
j
(
l
)
\delta^{(l)}_{j}
δj(l) 为函数求导时迈出的那一丁点微分,所以更准确的说
δ
j
(
l
)
=
∂
∂
z
j
(
l
)
c
o
s
t
(
i
)
\delta^{(l)}_{j}=\frac{\partial}{\partial z^{(l)}_{j}}cost(i)
δj(l)=∂zj(l)∂cost(i)
实际是代价函数关于这些多计算出的中间项的偏导数,衡量的是为了影响这些中间项我们想要改变神经网络中的权重的程度,进而影响神经网络中整个输出结果,并影响所有的代价函数
梯度检验
当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误,意味着,虽然代价看上去在不断减小,但最终的结果可能并不是最优解。
为了避免这样的问题,我们采取一种叫做梯度的数值检验(Numerical Gradient Checking)方法。这种方法的思想是通过估计梯度值来检验我们计算的导数值是否真的是我们要求的。
当
θ
\theta
θ是一个向量时,我们则需要对偏导数进行检验。因为代价函数的偏导数检验只针对一个参数的改变进行检验,下面是一个只针对
θ
1
\theta_1
θ1进行检验的示例:
∂
∂
θ
1
=
J
(
θ
1
+
ε
1
,
θ
2
,
θ
3
.
.
.
θ
n
)
−
J
(
θ
1
−
ε
1
,
θ
2
,
θ
3
.
.
.
θ
n
)
2
ε
\frac{\partial}{\partial\theta_1}=\frac{J\left(\theta_1+\varepsilon_1,\theta_2,\theta_3...\theta_n \right)-J \left( \theta_1-\varepsilon_1,\theta_2,\theta_3...\theta_n \right)}{2\varepsilon}
∂θ1∂=2εJ(θ1+ε1,θ2,θ3...θn)−J(θ1−ε1,θ2,θ3...θn)
随机初始化
任何优化算法都需要一些初始的参数。到目前为止我们都是初始所有参数为0,这样的初始方法对于逻辑回归来说是可行的,但是对于神经网络来说是不可行的。如果我们令所有的初始参数都为0,这将意味着我们第二层的所有激活单元都会有相同的值。同理,如果我们初始所有的参数都为一个非0的数,结果也是一样的。
我们通常初始参数为正负ε之间的随机值
组合到一起
训练神经网络:
-
参数的随机初始化
一般把权重初始化为很小的值,接近0 -
利用正向传播方法计算所有的 h θ ( x ) h_{\theta}(x) hθ(x)
-
编写计算代价函数 J ( θ ) J(\theta) J(θ) 的代码
-
利用反向传播方法计算所有偏导数 ∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta) ∂Θij(l)∂J(Θ)
-
利用数值检验方法检验这些偏导数
也就是梯度验证,验证后要停止 -
使用优化算法来最小化代价函数
使用梯度下降或其他优化算法
第6周
数据集的组织
训练集:有多个模型,参数(权重不同),每个模型通过训练都得到对应训练集代价函数最小的参数集
验证集:利用上述参数集对应的模型,计算验证集代价函数的误差,得到最小的那个模型就是最佳的模型
测试集:用来验证其他的性能
方差、偏差
方差大:对应过拟合,训练集集误差大,验证集误差大
偏差大:对应欠拟合;训练集集误差小,验证集误差大
补充-3Blue1Brown
神经网络
我有
28
×
28
28{\times}28
28×28大小的图片,然后一共有
784
784
784个像素,每个像素就是第一层的输入,第一层的输入也叫作第一层的激活值(激活函数),
每一层神经元的任务就是告诉这个网络,此时我要关注的是什么信息
如上图所示,这个神经元关注的就是在图像中某一个特定的区域是否存在短线
这个短线的定义就是利用(第一层的输入,也叫作第一层的激活值)的加权和来计算,其中每一条线都代表一个权重,即对每一个输入的激活值都有一个权重系数
计算完这个权重后,输入到激活函数sigmoid函数使输出归一化到[0,1]区间,表示的就是我要关注的这个特性在此图片中的生成概率(有没有的概率)是多少,越接近1表示存在的可能性越大
其中权重矩阵告诉网络我要关注什么任务,激活函数用来计算生成存在这个任务的概率是多少
最终输出的是激活值,一个神经元表示一个激活值
每一层有多个神经元,表示从上一层结束后,这一层我要关注什么任务,并计算对应的激活值(概率值)
注意:在每层神经元中加一个偏置值(偏置神经元),当加完偏置神经元后,我再输入到激活函数中计算激活值(概率值),这个偏置的作用是,当加权和大于多少或小于多少时,我才被激活
反向传播
假设第二层有16个神经元,第三层有16个神经元,所以一共有
(
784
+
1
)
×
16
+
(
16
+
1
)
×
16
+
(
16
+
1
)
×
10
(784+1){\times}16+(16+1){\times}16+(16+1){\times}10
(784+1)×16+(16+1)×16+(16+1)×10(大概是这么计算的),一共有这么多参数需要计算
最后输出10个数,注意这十个数在[0,1]之间,然后一个训练样本最终会计算出10个这样的数,最大的那个表示作为对应结果的可能概率最大,
最后输出的10个数要与真正这个样本的标签向量,其实这个样本的真实标签是[0 0 1 0 0 0 0 0 0 0],一个样本的输出值要与真实标签比较,然后计算平方和,就是计算代价函数,然后一共有许多的训练样本,每个样本的输出都最后与真实标签进行比较,计算平方和,最后取平均,最终得到了整个样本的代价值
下面是利用梯度下降法来减少误差,调整权重
其实每一个训练样本的输出值是由上述计算的多个参数最终计算得到的,向量化就相当于是由许多参数组成的一个参数向量,需要对每项参数计算梯度
梯度就是代价函数对每一项参数的敏感程度
增加某一个特定的神经元的激活值,有三种方法可以选择:增加偏置值,增加权重值,改变激活函数
改变权重:一般来说上一层的神经元激活值大的神经元,连接到下一层的相应的权重也较大,因此改变这些权重值对下一层激活值的影响也最大
改变上一层激活值:依照连接两层的权重的大小成比例的改变上一层的激活值,也就是对应权重越大的激活值改变也越大
实际上反向传播:就是依照最终输出值和真值标签之间的偏差,然后给出倒数第二层所所期待的改变,这样就能改变最终的输出值,最终重复改变前面层的权重等等参数
上述对应的是一个训练样本的改变情况,得出的是在该训练样本下所有权重参数的改变情况
然后对所有训练样本都要计算这些权重的改变情况,计算每个权重需要改变的平均值
上述中就是每个权重参数梯度下降的步骤思想
实际上利用全部的训练样本得到每个参数的梯度,计算量很大,因此每次选择一部分的训练样本作为minibatch调整参数,这就是随机梯度下降
反向传播计算的是单个训练样本的参数如何改变,但是最终完成的模型中的参数需要综合所有的训练样本,由于计算量过大,可以将整个训练样本拆分成多个样本子集来训练
其实与吴恩达的一样,就是上角标下角标解释的方法不一样
吴恩达
第 k k k层:
z ( k ) = θ ( k − 1 ) ⋅ a ( k − 1 ) z^{(k)}={\theta}^{(k-1)}·a^{(k-1)} z(k)=θ(k−1)⋅a(k−1)
a ( k ) = g ( z ( k ) ) = h θ ( k ) a^{(k)}=g(z^{(k)})=h_{\theta}^{(k)} a(k)=g(z(k))=hθ(k)
注意这里没写偏置视频
第 k k k层:
z ( k ) = θ ( k ) ⋅ a ( k − 1 ) + b ( k ) z^{(k)}={\theta}^{(k)}·a^{(k-1)}+b^{(k)} z(k)=θ(k)⋅a(k−1)+b(k)
a ( k ) = g ( z ( k ) ) = h θ ( k ) a^{(k)}=g(z^{(k)})=h_{\theta}^{(k)} a(k)=g(z(k))=hθ(k)其实二者的内涵表示的东西是一样的,就是角标的标注不同