激活函数与损失函数深入理解——优化神经网络的学习效率

/ Deep Learning / 没有评论 / 519浏览

激活函数

Sigmoid 函数

$$\sigma(z) = \frac{1}{1+ e^{-z}}$$

Softmax 函数

$$a_j^L = \frac{e^{z_j^L}}{\sum_x e^{z_k^L}} $$

如果输出层是 sigmod 计算得出, 因为总和不为1, 所以不能描述为概率分布

tanh 函数

$$\tanh(z) = \frac{e^z -e^{-z}}{e^z + e^{-z}}$$

$$\sigma(z) = \frac{1+tanh(z/2)}{2}$$

tanh 只是一个重新调节了度量的 sigmoid 函数

其取值在 -1 到 1 之间, 不像 sigmoid 在 0, 1 之间, 所以输入要转化到-1, 1之间

rectified linear

$$\max(0,w \cdot x + b)$$

像 sigmoid, tanh 一样, 也可以模拟何函数

优势: 增加权重不会引起饱和, 但加权的输入如果是负数, gradient就为0

总结

要靠实验比较rectified linear和sigmoid, tanh的好坏

目前神经网络还有很多方面理论基础需要研究, 为什么学习能力强, 现在的一些实验表明结果比较好, 但发展底层理论基础还有很长的路要走

损失函数

如果想了解损失函数,请查看损失函数与风险评估详细介绍——统计机器学习模型评价

二次损失函数

英文名:quadratic cost function

函数定义

$$C = \frac{1}{2n} \sum_{x} \parallel y(x) - a^L \parallel ^2$$

理想情况是让神经网络学习更快,但使用以上的损失函数,会出现开始学习慢, 后来逐渐变快快的问题.

学习慢原因

学习的过程采用梯度下降法,所以关键在于偏导数的大小

交叉熵损失函数

英文名:cross-entropy cost function

函数定义

$$C = -\frac{1}{n} \sum_{x} \left [ y \ln a + (1-y) \ln(1-a) \right ]$$

$a = \sigma(z)$
$z = w \cdot a + b$

显然 cross-entropy cost 函数满足损失函数的两个条件,因此可以作为损失函数

导数求解

$$ \begin{aligned} \frac{\partial C}{\partial w_j} &= - \frac{1}{n} \sum_{x} \left [\frac{y}{\sigma(z)} - \frac{1-y}{1-\sigma(z)} \right ] \frac{\partial \sigma}{\partial w_j} \\ &= - \frac{1}{n} \sum_{x} \left [ \frac{y}{\sigma(z)} - \frac{1-y}{1-\sigma(z)} \right ] \sigma^{'}(z)x_j \\ &= \frac{1}{n} \sum_{x} \frac{\sigma^{'}(z)x_j}{\sigma(z)\left [ 1-\sigma(z) \right ]} \left[ \sigma(z) - y \right ] \\ &= \frac{1}{n} \sum_{x}x_j \left[ \sigma(z) - y \right ] \end{aligned} $$

同理对 b 求偏导可得

$$\frac{\partial C}{\partial b} = \frac{1}{n} \sum_{x} \left [ \sigma(z) - y \right ]$$

学习快原理

显然,学习的快慢取决于

$$\sigma(z) - y$$

也就是输出的 Error

这也正是我们想要的结果,在错误比较大的时候,尽量更新的快,当接近真实值时,更新变慢

对数似然估计函数

英文名:log-likelyhood cost function

函数定义

$$C = -\ln a_j^L$$

适合做损失函数:

学习效率

是否存在学习慢的问题取决于偏导数的大小

偏导求解

$$\frac{\partial C}{\partial b_j^L} = a_j^L - y_j$$

$$\frac{\partial C}{\partial w_{jk}^L} = a_k^{L-1}(a_J^L - y_j)$$

显然和 cross-entropy 得到的偏导公式本质上是一样的, 所以可以解决学习慢的问题

损失函数对比