玩樱之诗玩的

隐藏层与激活函数

隐藏层

我们通过矩阵XRn×d\mathbf{X} \in \mathbb{R}^{n \times d}来表示nn个样本的小批量, 其中每个样本具有dd个输入特征。 对于具有hh个隐藏单元的单隐藏层多层感知机, 用HRn×h\mathbf{H} \in \mathbb{R}^{n \times h}表示隐藏层的输出, 称为隐藏表示(hidden representations)。 在数学或代码中,H\mathbf{H}也被称为隐藏层变量(hidden-layer variable) 或隐藏变量(hidden variable)。 因为隐藏层和输出层都是全连接的, 所以我们有隐藏层权重W(1)Rd×h\mathbf{W}^{(1)} \in \mathbb{R}^{d \times h}和隐藏层偏置b(1)R1×h\mathbf{b}^{(1)} \in \mathbb{R}^{1 \times h}以及输出层权重W(2)Rh×q\mathbf{W}^{(2)} \in \mathbb{R}^{h \times q}和输出层偏置b(2)R1×q\mathbf{b}^{(2)} \in \mathbb{R}^{1 \times q}

在仿射变换之后对每个隐藏单元应用非线性的激活函数σ\sigma

H=σ(XW(1)+b(1)),O=HW(2)+b(2).\begin{split}\begin{aligned} \mathbf{H} & = \sigma(\mathbf{X} \mathbf{W}^{(1)} + \mathbf{b}^{(1)}), \\ \mathbf{O} & = \mathbf{H}\mathbf{W}^{(2)} + \mathbf{b}^{(2)}.\\ \end{aligned}\end{split}

隐藏层可以继续堆叠,从而产生更有表达能力的模型

激活函数

ReLU函数

ReLU(x)=max(x,0).\operatorname{ReLU}(x) = \max(x, 0).

1
torch.relu(x)

使用ReLU的原因是,它求导表现得特别好:要么让参数消失,要么让参数通过。 这使得优化表现得更好,并且ReLU减轻了困扰以往神经网络的梯度消失问题

当输入为负时,ReLU函数的导数为0,而当输入为正时,ReLU函数的导数为1。 注意,当输入值精确等于0时,ReLU函数不可导。 在此时,我们默认使用左侧的导数,即当输入为0时导数为0。

变体(能通过负参数的信息)

pReLU(x)=max(0,x)+αmin(0,x).\operatorname{pReLU}(x) = \max(0, x) + \alpha \min(0, x).

sigmoid函数

对于一个定义域在R\mathbb{R}中的输入, sigmoid函数将输入变换为区间(0, 1)上的输出。

sigmoid(x)=11+exp(x).\operatorname{sigmoid}(x) = \frac{1}{1 + \exp(-x)}.

1
y = torch.sigmoid(x)

sigmoid函数平滑,定义域内处处可导。

ddxsigmoid(x)=exp(x)(1+exp(x))2=sigmoid(x)(1sigmoid(x)).\frac{d}{dx} \operatorname{sigmoid}(x) = \frac{\exp(-x)}{(1 + \exp(-x))^2} = \operatorname{sigmoid}(x)\left(1-\operatorname{sigmoid}(x)\right).

在0处导数取到最大0.25,图像为单峰。

tanh函数

对于一个定义域在R\mathbb{R}中的输入, tanh函数将输入变换为区间(-1, 1)上的输出。

tanh(x)=1exp(2x)1+exp(2x).\operatorname{tanh}(x) = \frac{1 - \exp(-2x)}{1 + \exp(-2x)}.

1
y = torch.tanh(x)

导数:

ddxtanh(x)=1tanh2(x).\frac{d}{dx} \operatorname{tanh}(x) = 1 - \operatorname{tanh}^2(x).

在0处导数取到最大1,图像为单峰。