【深度学习】吴恩达课程笔记(五)——超参数调试、batch norm、Softmax 回归
笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~
【吴恩达课程笔记专栏】
【深度学习】吴恩达课程笔记(一)——深度学习概论、神经网络基础
【深度学习】吴恩达课程笔记(二)——浅层神经网络、深层神经网络
【深度学习】吴恩达课程笔记(三)——参数VS超参数、深度学习的实践层面
【深度学习】吴恩达课程笔记(四)——优化算法
吴恩达课程笔记——超参数调试、batch norm、Softmax 回归
- 九、超参数调试
- 1.调试处理
- 超参数优先级
- 2.超参数数值搭配选择方法
- 3.为超参数选择合适的范围(标尺)
- 4.超参数调整实践(Pandas VS Caviar)
- 熊猫法
- 鱼子酱法
- 十、batch norm
- 1.归一化网络的激活函数
- 2.把batch norm拟合进神经网络
- 使用的位置
- batch norm拟合进神经网络
- batch norm与minibatch一起使用
- 𝑏[l]参数没有意义
- 3.batch norm为什么好用?
- 问题的提出
- 总结
- 4.测试时的batch norm
- 十一、Softmax 回归
- 1.Softmax 回归简介
- 简介
- 计算方法
- softmax回归举例
- 2.训练一个 Softmax 分类器
- Softmax 名称来源
- 怎样训练带有 Softmax 输出层的神经网络
- 反向传播步骤或者梯度下降法
九、超参数调试
1.调试处理
超参数优先级
红色第一,黄色第二,紫色第三,没框的基本不调
2.超参数数值搭配选择方法
超参数少的时候可以像左面一样均匀取点研究效果。
超参数多的时候可以选择随机取点研究效果。如果此时发现某点及其附近的效果比其它部分好,那么就在这附近的区域较为密集地再多取一些点。如此研究直到得出足够满意的超参数搭配。如下图:
3.为超参数选择合适的范围(标尺)
举例说明:
-
神经网络某层的神经元个数:可以取50-100间均匀随机值
-
神经网络层数:可以取2-4间均匀随机值
-
学习率:可以取0.0001-1间不均匀随机值
α = 1 0 − 4 ∗ n p . r a n d o n . r a n d ( ) 例子中的范围为 [ − 4 , 0 ] \alpha=10^{-4*np.randon.rand()}\\ 例子中的范围为[-4,0] α=10−4∗np.randon.rand()例子中的范围为[−4,0]
标尺长上面这样。这样可以给不同的数量级分配相同的搜索资源。
- 指数平均的 𝛽 :可以取0.9-0.999间不均匀随机值。
因为指数平均计算的是1/(1- 𝛽 )个数的平均值,这个式子在beta接近1的时候对beta更加敏感,因此应该令beta越接近1时,给相应的beta范围分配更多的搜索权重。
如图所示,对1- 𝛽 施以类似上面的学习率的计算,即可达到效果。
实际上,即使不使用这类换标尺的方法,只要有足够数据,或者能恰当的使用逐渐缩小超参数组合范围的方法,也可以较快的算出超参数的恰当值。
4.超参数调整实践(Pandas VS Caviar)
熊猫法
同时运行一个模型,观察其性能随时间变化,手动调整超参数
鱼子酱法
同时运行多个模型,不进行人工干预。全部训练完毕后选出训练结果较好的模型。
十、batch norm
1.归一化网络的激活函数
含义:将z进行归一化。即将z的分布调整到平均值为0,值分布调整到0-1之间(方差为1)。
目的:使得神经网络的参数计算更有效率
注意:在训练隐藏层的时候,有时候为了发挥sigmoid、tanh等的效果,你不希望数据的方差变为1,那么你就没必要对z归一化
z
(
1
)
,
.
.
.
,
z
(
m
)
——
>
z
[
l
]
(
i
)
,
i
为
1
到
m
的某个隐藏层
i
μ
=
1
m
∑
i
m
z
(
i
)
σ
n
o
r
m
2
=
1
m
∑
i
m
(
z
i
−
μ
)
2
z
n
o
r
m
(
i
)
=
z
(
i
)
−
μ
σ
2
+
ϵ
z^{(1)},...,z^{(m)} ——>z^{[l](i)},i为1到m的某个隐藏层i\\ \mu=\frac{1}{m}\sum_{i}^{m}z^{(i)} \\ \sigma_{norm}^{2}=\frac{1}{m}\sum_{i}^{m}(z_i-\mu)^{2} \\ z_{norm}^{(i)}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^{2}+\epsilon}}\\
z(1),...,z(m)——>z[l](i),i为1到m的某个隐藏层iμ=m1i∑mz(i)σnorm2=m1i∑m(zi−μ)2znorm(i)=σ2+ϵz(i)−μ
但是有时候我们不希望z分布在0-1、平均值为0,也许分布在别的地方会更有意义。
z
˜
(
i
)
=
γ
z
n
o
r
m
(
i
)
+
β
如果
γ
,
β
如下
:
γ
=
σ
2
+
ϵ
β
=
μ
那么:
z
˜
(
i
)
=
z
(
i
)
\~z^{(i)}=\gamma z_{norm}^{(i)}+\beta\\ 如果\gamma ,\beta如下: \\ \gamma=\sqrt{\sigma^{2}+\epsilon} \\ \beta=\mu \\ 那么:\~z^{(i)}=z^{(i)}
z˜(i)=γznorm(i)+β如果γ,β如下:γ=σ2+ϵβ=μ那么:z˜(i)=z(i)
2.把batch norm拟合进神经网络
使用的位置
前向传播中:在计算出z后,使用激活函数前
每个单元负责计算两件事。第一,它先计算 𝑧,然后应用其到激活函数中再计算 𝑎 。每个圆圈代表着两步的计算过程。
batch norm拟合进神经网络
-
没有应用 Batch 归一化:
把输入𝑋拟合到第一隐藏层,然后首先应用 𝑤[1] 和 𝑏[1] 计算 𝑧[1]。
接着,把 𝑧[1] 拟合到激活函数以计算 𝑎[1]。
-
应用 Batch 归一化:Batch 归一化是发生在计算𝑧和𝑎之间的。
-
把输入𝑋拟合到第一隐藏层,然后首先应用 𝑤[1] 和 𝑏[1] 计算 𝑧[1]。
-
(第一层)将 𝑧[1] 值进行 Batch 归一化,简称 BN,此过程将由 𝛽[1] 和 𝛾[1] 两参数控制,这一操作会给你一个新的规范化的 𝑧[1] 值(𝑧̃[1] ),然后将其输入激活函数中得到 𝑎[1],即 𝑎[1] = 𝑔[1] (𝑧̃[l])。
-
(第二层)应用 𝑎[1] 值来计算 𝑧[2],此过程是由 𝑤[2] 和 𝑏[2] 控制的。与你在第一层所做的类似,通过 𝛽[2] 和 𝛾[2] 将 𝑧[2] 进行 Batch 归一化,得到 𝑧̃[2],再通过激活函数计算出 𝑎[2]。
注意:这里的这些( 𝛽[1], 𝛽[2]等等)和超参数𝛽没有任何关系。
( 𝛽[1], 𝛽[2]等等)是算法的新参数 ,接下来你可以使用想用的任何一种优化算法,比如使用梯度下降法来执行它。更新参数 𝛽为 𝛽[l] = 𝛽[l] - 𝛼 𝑑𝛽[l]。你也可以使用 Adam 或 RMSprop 或 Momentum,以更新参数 𝛽 和 𝛾,并不是只应用梯度下降法。
后者是用于 Momentum、 Adam、 RMSprop 或计算各个指数的加权平均值。
-
batch norm与minibatch一起使用
第一个 mini-batch:𝑋{1}
- 应用参数𝑤[1]和𝑏[1] ,计算𝑧[1]
- Batch 归一化减去均值,除以标准差,由𝛽[1]和𝛾[1]得到𝑧̃[1]
- 再应用激活函数得到𝑎[1]
- 应用参数𝑤[2]和𝑏[2],计算𝑧[2]
- 然后继续下去
继续第二个 mini-batch:𝑋{2}
继续第三个 mini-batch:𝑋{3}
𝑏[l]参数没有意义
在使用 Batch 归一化,其实你可以消除参数 𝑏[l],或者设置为 0,参数变成𝑧[l] = 𝑤[l]𝑎[[l-1]
然后对𝑧[l]进行归一化,𝑧̃[l] = 𝛾[l]z[l] +𝛽[l],最后会用参数𝛽[l],以便决定𝑧̃[l]的取值。
**总结:**Batch 归一化,z[l]所有的偏移最终都由归一化确定了, 𝑏[l]参数没有意义,所以由控制参数𝛽[l]代替来影响转移或偏置条件。
3.batch norm为什么好用?
问题的提出
如上图,如果你的训练集是左边的那些黑猫,那么你的训练样本分布可以由左侧坐标系图代替。如果你的训练集是右边那些花猫,那么你的样本分布可由右侧坐标图代替。
假设你分别用两组训练集训练两个模型,那么由于样本分布不同,最后得到的“找猫函数”也会不同。
现在你希望有一个模型,能同时识别黑猫和不同颜色的猫,但是由上可知,如果你同时用黑猫和花猫的训练集进行训练,就容易让神经元感到“迷惑”
总结
- Batch 归一化,从神经网络后层角度而言,前层不会左右移动的那么多,因为被均值和方差所限制,使后层的学习工作变得更容易些。
- Batch 归一化有轻微正则化效果
4.测试时的batch norm
μ = 1 m ∑ i m z ( i ) σ n o r m 2 = 1 m ∑ i m ( z i − μ ) 2 z n o r m ( i ) = z ( i ) − μ σ 2 + ϵ z ˜ ( i ) = γ z n o r m ( i ) + β \mu=\frac{1}{m}\sum_{i}^{m}z^{(i)} \\ \sigma_{norm}^{2}=\frac{1}{m}\sum_{i}^{m}(z_i-\mu)^{2} \\ z_{norm}^{(i)}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^{2}+\epsilon}}\\ \~z^{(i)}=\gamma z_{norm}^{(i)}+\beta\\ μ=m1i∑mz(i)σnorm2=m1i∑m(zi−μ)2znorm(i)=σ2+ϵz(i)−μz˜(i)=γznorm(i)+β
测试时,我们可能不使用minibatch,而是一个一个的过训练样本。这个时候训练集的平均数 𝜇 和方差 𝜎2 怎么获得呢?
-
使用指数加权平均计算
-
使用流动平均来粗略估算
-
使用深度学习框架自默认的方式估算
十一、Softmax 回归
1.Softmax 回归简介
简介
softmax回归是logistic回归的一般形式,它做的不只是二分分类,也可以做多分分类
区分四个种类(class),0-其他、1-猫、2-狗、3-鸡
定义C为种类数,这里C=4,可以看到输出层有四个神经元,他们分别输出结果是0、1、2、3的概率,且总和为1 ,输出结果是一个4*1的向量。
计算方法
左侧是softmax输出层激活函数计算方法:
z
[
l
]
=
W
[
l
]
a
[
l
−
1
]
+
b
[
l
]
S
o
f
t
m
a
x
激活函数
:
a
[
l
]
=
g
[
l
]
(
z
[
l
]
)
t
=
e
z
[
l
]
a
[
l
]
=
e
z
[
l
]
∑
j
=
1
4
t
i
a
i
[
l
]
=
t
i
∑
j
=
1
4
t
i
z^{[l]} = W^{[l]}a^{[l-1]} + b^{[l]} \\ Softmax 激活函数: a^{[l]}=g^{[l]}(z^{[l]})\\ t=e^{z^{[l]}} \\ a^{[l]}=\frac{e^{z^{[l]}}}{\sum_{j=1}^{4}t_i} \\ a_i^{[l]}=\frac{t_i}{\sum_{j=1}^{4}t_i} \\
z[l]=W[l]a[l−1]+b[l]Softmax激活函数:a[l]=g[l](z[l])t=ez[l]a[l]=∑j=14tiez[l]ai[l]=∑j=14titi
右侧是一个例子:
softmax回归举例
2.训练一个 Softmax 分类器
Softmax 名称来源
hardmax 会把向量𝑧变成这个向量[1 0 0 0], 与hardmax 对比,Softmax所做的从𝑧到概率的映射更为温和
怎样训练带有 Softmax 输出层的神经网络
举例:单个样本为猫,这个样本中神经网络的表现不佳,这实际上是一只猫,但却只分配到 20%是猫的概率,所以在本例中表现不佳。
用什么损失函数来训练这个神经网络?
损失函数:
L
(
y
^
,
y
)
=
−
∑
j
=
1
C
y
j
l
o
g
y
^
j
y
1
=
y
3
=
y
4
=
0
,
y
2
=
1
,则
L
(
y
^
,
y
)
=
−
l
o
g
y
^
2
L
(
y
^
,
y
)
越小越好,则
y
^
2
需要尽量大
L(ŷ,y)=-\sum_{j=1}^{C}y_jlogŷ_j \\ y_1 = y_3 = y_4 = 0,y_2= 1,则L(ŷ,y)=-logŷ_2 \\ L(ŷ,y)越小越好,则ŷ_2需要尽量大
L(y^,y)=−j=1∑Cyjlogy^jy1=y3=y4=0,y2=1,则L(y^,y)=−logy^2L(y^,y)越小越好,则y^2需要尽量大
反向传播步骤或者梯度下降法
公式:
d
z
[
l
]
=
y
^
−
y
dz^{[l]}=ŷ-y
dz[l]=y^−y