0%

深度学习-超参数调试处理

深度学习-超参数调试处理

超参数选择

学习率\(\alpha\)

momentum中的\(\beta\)

Adam中的\(\beta_1,\beta_2,\epsilon\)

层数#layers

不同层隐藏单元数量#hidden units

学习率衰减率

mini-batch size

随机取值:调试时,随机取值,而不是网格取值

精确搜索:采用由粗糙到精细的策略,发现一块区域中的点对应的超参数取得的效果较好,则可以放大该区域,然后在其中更密集地取值

为超参数选择合适的范围

假设认为\(\alpha\)=0.0001,...,1

1
2
r = -4*np.random.rand()# [-4,0]
lr = 10 ** r # [10^-4,1]

假设认为\(\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拟合进神经网络

image-20201221143511249
image-20201221143511249

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

image-20201221144146555
image-20201221144146555

实现

\(对每个第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有用?

  1. 和Logistic Regression中的归一化一样,通过归一化,可以将不同特征值包括隐藏单元的值的范围归到类似,从而加速学习
  2. 可以使权重比网络更滞后或更深层
  3. 有一些正则化效果

在测试时的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)})\)