深度学习-超参数调试处理
超参数选择
学习率\(\alpha\)
momentum中的\(\beta\)
Adam中的\(\beta_1,\beta_2,\epsilon\)
层数#layers
不同层隐藏单元数量#hidden units
学习率衰减率
mini-batch size
随机取值:调试时,随机取值,而不是网格取值
精确搜索:采用由粗糙到精细的策略,发现一块区域中的点对应的超参数取得的效果较好,则可以放大该区域,然后在其中更密集地取值
为超参数选择合适的范围
假设认为\(\alpha\)=0.0001,...,1
1 | r = -4*np.random.rand()# [-4,0] |
假设认为\(\beta\)=0.9,...,0.999,则
1-\(\beta\)=0.1,...,0.001
\(r \in [-3,-1]\)
\(1-\beta=10^r\)
\(\beta = 1-10^r\)
Batch Normalization
Batch归一化会使参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定
和Logistic Regression中归一化输入X一样,在深度神经网络中
对任意隐藏层而言,可以通过对\(z^{[l]}\)归一化,加快训练 \[ 已知一些中间值,假设有一些隐藏单元值:z^{(1)},\cdots,z^{(m)} (省略了[l])\\ \mu = \frac{1}{m}\sum_i z^{(i)} \\ \sigma^2 = \frac{1}{m} \sum_i(z_i-\mu)^2 \\ z^{(i)}_{norm} = \frac{z^{(i)}-\mu}{\sqrt{\sigma^2+\epsilon}} \\ \tilde z^{(i)} = \gamma z^{(i)}_{norm}+\beta(\gamma,\beta是学习参数)从而:\\ 如果\gamma = \sqrt{\sigma^2+\epsilon},\beta = \mu,则\tilde z^{(i)}=z^{(i)} \\ \]
将Batch Norm拟合进神经网络

参数:\(W^{[1]},b^{[1]},\cdots,W^{[L]},b^{[L]} \\ \beta^{[1]},\gamma^{[1]},\cdots,\beta^{[L]},\gamma^{[L]}\)

实现
\(对每个第t个mini-batch: \\ 在X^{\{t\}}上计算前向传播 \\ 对每个隐藏层,使用BN计算,用\tilde z^{[l]}代替z^{[l]} \\ 使用反向传播计算dW^{[l]},\bcancel{db^{[l]}},d\beta^{[l]},d\gamma^{[l]} \\ 更新参数:W^{[l]}:=W^{[l]}-\alpha dW^{[l]},\beta^{[l]} :=\beta^{[l]}-\alpha d\beta^{[l]},\gamma^{[l]} :=\gamma^{[l]}-\alpha d\gamma^{[l]}\)
为什么Batch Norm有用?
- 和Logistic Regression中的归一化一样,通过归一化,可以将不同特征值包括隐藏单元的值的范围归到类似,从而加速学习
- 可以使权重比网络更滞后或更深层
- 有一些正则化效果
在测试时的Batch Norm
\[ 在测试时,需要单独估算\mu和\sigma^2,通常的\\ \mu,\sigma^2:使用指数加权平均来估算,这个平均数涵盖所有mini-batch\\ 假设有mini-batch:\\ X^{\{1\}},X^{\{2\}},\cdots,\\ 对应的有:\\ \mu^{\{1\}[l]},\mu^{\{2\}[l]},\cdots, \rightarrow \mu\\ 同样的有:\\ \sigma^{\{1\}[l]},\sigma^{\{2\}[l]},\cdots, \rightarrow \sigma^2 \\ 最终测试时:\\ z^{(i)}_{norm}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^2+\epsilon}} \]
总结:在训练时,\(\mu\)和\(\sigma^2\)是在整个mini-batch上计算出来的,包含了多个数量的样本,但在测试时,可能需要逐处理样本,因为可以根据训练集估算\(\mu\)和\(\sigma^2\),在实际操作中,我们通常使用指数加权平均来估算\(\mu\)和\(\sigma^2\)
Softmax Regression
使用softmax回归进行多分类
\(C = \#classes \\ 则输出层单元数通常n^{[L]}=C,对应每类的概率 \\\)
Softmax layer:
\(Z^{[l]} = W^{[l]}a^{[l-1]}+b^{[l]} ,shape=(C,1)\\ 激活函数: \\ t = e^{z^{[l]}} ,shape=(C,1)\\ a^{[l]} = \frac{t}{\sum_{j=1}^Ct_j},a_i^{[l]} = \frac{t_i}{\sum_{j=1}^Ct_j} \\ 整个过程概括为softmax激活函数:\\ a^{[l]} = g^{[l]}(z^{[l]}),\\不同之处在于输入输出都是一个shape=(C,1)的向量,而之前的sigmoid、ReLU等输入输出都是一个实数\)
Loss function
\(L(\hat y,y) = -\sum_{j=1}^Cy_j\log\hat y_j \\ J(W^{[1]},b^{[1]},\cdots) = \frac{1}{m}\sum_{i=1}^m L(\hat y^{(i)},y^{(i)})\)