目录算法
1、超参数调整网络
从高到低:学习率$\alpha$——>$\beta$(0.9)、hidden units、minibatch size——>layers、学习率衰减——>$\beta_{1}$(0.9)、$\beta_{2}$(0.99)、$\epsilon$($10^{-8}$)app
不要用grid来设置选择,由于不一样参数的重要性不一样框架
Hyperparameter2 | ||||
Hyperparameter1 | x | x | x | x |
x | x | x | x | |
x | x | x | x | |
x | x | x | x |
参数的选择范围能够先肯定一个大的,再缩小ide
2、为超参数选择合适的范围函数
如每层的节点数或网络层数。但并非适用于全部超参数学习
若是在[0.0001,1]之间均匀选择,那么其实90%的数据是来自于[0.1,1],10%是来自[0.0001,0.1]。为何这个不合理?(没有找到合理的解释,是否是经验呢?)测试
更合理的方法应该是把[0.0001,1]转换成[-4,0] (10-4 = 0.0001),而后在[-4,0]间取样,这样在[0.0001,0.001]和[0.1,1]间取到的数的几率更平均spa
更通常地,取对数,把区间写成[a,b]3d
为何直接取[0.9,0.999]是均匀分布很差:当$\beta$越接近1时,它很小的变化会对$\frac{1}{1-\beta}$结果形成更大的影响
$\beta$ | 0.9 | 0.999 | 0.9000 | 0.9005 | 0.999 | 0.9995 |
10 | 1000 | |||||
$1-\beta$ | 0.1 | 0.001 | ||||
$\frac{1}{1-\beta}$ | 10 | 10.05 | 1000 | 2000 |
调整方法:把对$\beta$的选择,变成对$1-\beta$的考虑,而后再进行approximate scale,转换成对次方的取值[-3, -1]
3、超参数的实践:pandas VS canviar
一次就关注一个model,而后频繁地进行修改;系统比较复杂时选这个
一次能够并行调试多个model;有比较多的计算资源时选这个
4、正则化激活函数
实现方式:batch归一化算法(这里默认对z值而不是对a)。计算出znorm后,再求一个式子(有两个参数$\eta$、$\beta$),最后是用$\tilde{z}$来计算,而$\tilde{z}$的均值和方差能够经过两个参数来控制
给定一层的中间结果$z^{(1)}, z^{(2)}..., z^{(m)}$ |
|
$\mu = \frac{1}{m}\sum_{i}z^{(i)}$ $\sigma = \frac{1}{m}\sum_{i}(z_{i}-\mu)^2$ $z^{(i)}_{norm}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^2+\epsilon}}$ $\tilde{z}^{(i)}=\eta z^{(i)}_{norm}+\beta$ |
if $\eta = \sqrt{\sigma^2+\epsilon}$ and $\beta = \mu$ then $\tilde{z}^{(i)}=z^{(i)}$ |
由于后面会对$z$值求平均再减去均值,这样$b^{[l]}$不管是什么值,最后都不会对结果有影响,所以这里能够再也不考虑$b^{[l]}$这个参数,也就是$z^{[l]}=w^{[l]}a^{[l-1}]$。在反向求导中也不须要考虑$db^{[l]}$
例:对黑猫进行训练获得一个映射关系。若是把这个函数运用到对有色猫的识别,也就是输入值的分布发生了改变。那其实应该从新进行训练(covariance shift问题)
对于一个深层网络,若是考虑第$l$层,当前面的参数发生变化时,$l$层的输入也就相应变化。经过batch normalize可让$l$层看到/处理的数据分布变得更稳定,减小了前面参数对后面层的影响。
训练时,bn是须要在整个mini-batch上执行,但测试时可能不能一次同时执行整个mini-batch(样本数量比较大),所以须要另外的方法进行估算
方法:指数权重平均值
5、softmax回归
相对于逻辑回归,softmax把输入分红$k$类,通常$k>2$
以下,把输入图片分红4类
$a=softmax(z)=\begin{bmatrix}\frac{e^{z_1}}{\sum_{j=1}^ke^{z_j}}\\\vdots \\ \frac{e^{z_k}}{\sum_{j=1}^ke^{z_j}}\end{bmatrix}$
例:
$z=\begin{bmatrix}5\\ 2\\ -1\\3 \end{bmatrix}$ $t=e^{z_i}=\begin{bmatrix}e^5\\ e^2\\ e^{-1}\\e^3 \end{bmatrix}=\begin{bmatrix}148.4\\ 7.4\\ 0.4\\20.1 \end{bmatrix}$ $\sum_{j=1}^4t_j=176.3$ $a=\frac{t}{176.3}=\begin{bmatrix}0.842\\ 0.042\\ 0.002\\0.114 \end{bmatrix}$
相对于hard max,它是把最可能的结果标记为1,其它为0。而softmax是经过几率大小来体现
相关参数
$w=\begin{bmatrix}w_{11} & ... & w_{1m}\\ \vdots & &\vdots \\ w_{k1}& ... &w_{km} \end{bmatrix}$ $x=\begin{bmatrix}x_1\\\vdots \\ x_m\end{bmatrix}$ $b=\begin{bmatrix}b_1\\\vdots \\ b_k\end{bmatrix}$
前向传播
$z=wx+b=\begin{bmatrix}\sum_{i=1}^m w_{1i}x_i + b_1\\\vdots \\ \sum_{i=1}^m w_{ki}x_i + b_k\end{bmatrix}=\begin{bmatrix}z_1\\\vdots \\ z_k\end{bmatrix}$
$a=softmax(z)=\begin{bmatrix}\frac{e^{z_1}}{\sum_{j=1}^ke^{z_j}}\\\vdots \\ \frac{e^{z_k}}{\sum_{j=1}^ke^{z_j}}\end{bmatrix}=\begin{bmatrix}a_1\\\vdots \\ a_k\end{bmatrix}$
定义loss函数
$L(y, \widehat{y})=-\sum_{j=1}^ky_ilog\widehat{y_i}$,其中$\widehat{y}=a$
反向传播求导
$da_j=\frac{dL}{a_j}=-\frac{y_j}{a_j}$
接下来要计算:$dz_i=\frac{dL}{z_i}$
开始时老是用$dz_i=\frac{dL}{z_i}=\frac{dL}{a_i}\cdot \frac{a_i}{z_i}$
这个实际上是不对的,由于不只$a_i$计算中用到$z_i$,在$a_j$($j\neq i$)计算中也用到了,因此求导时要把全部$a$考虑进来,能够分红两种状况
$i = i$, $\frac{da_i}{dz_i}=\frac{e^{z_i}\sum_{j=1}^ke^{z_j}-(e^{z_i})^2}{(\sum_{j=1}^ke^{z_j})^2}=a_i-a_i^2$
$i \neq j$, $\frac{da_j}{dz_i}=-\frac{e^{z_i}e^{z_j}}{(\sum_{j=1}^ke^{z_j})^2}=-a_ia_j$
由上面两种状况合并可得:
$dz_i=\frac{dL}{da_i}\cdot\frac{da_i}{dz_i}+\sum_{j\neq i}\frac{dL}{da_j}\cdot \frac{da_j}{dz_i}\\=\frac{-y_i}{a_i}(a_i-a_i^2)+\sum_{j\neq i}\frac{y_j}{a_j} a_ia_j\\=-y_i+a_iy_i+a_i\sum_{j\neq i}y_j\\=-y_i+ai\sum_{j=1}^ky_j\\=a_i-y_i$
最后一步计算中,$y_j$求和为1,是由于一个输入只属于一种分类,也就是只有一个$y_i$取值为1,其它则为0