深层神经网络(一)去线性化和多层神经网络
2018-07-17 本文已影响0人
又双叒叕苟了一天
线性模型的局限性
前一篇文章中,我们所用的神经网络后一层的结果都只是前一层的结果做一个线性变换:a^{l+1}=a^lW_l,就算我们分了很多层,我们都可以通过计算:a^{l+1}=a^lW_l=a^{l-1}W_{l-1}W_l=\cdots=xW_0\cdots W_l=xW变成一层。显然这还是个线性变换,它只能处理线性的分类问题,而很多问题都是无法线性分割的。
激活函数去线性化
所以,我们对之前的网络进行两点改变:
- 添加了偏置项
- 每个结点的取值不再是单纯的加权和,而是在加权和之上还做了一个非线性变换(激活函数)
激活函数通常有:
- ReLU
- sigmoid
- tanh
当我们采用ReLU时,之前的前向传播可以改为:
a = tf.nn.relu(tf.matmul(x, w1) + biases1)
y = tf.nn.relu(tf.matmul(a, w2) + biases2)
多层网络解决异或运算
虽然我们加了偏置项,非线性的激活函数。在单层(没有隐藏层)的神经网络中,异或的问题仍然是无法解决的。不过,当我们加入了一个隐藏层,这个问题就能得到解决。由此可见,深层神经网络实际上有组合特征提取的功能。这个特性对于解决不易提取特征向量的问题(比如图片识别、语音识别等)有很大帮助。这也是深度学习在这些问题上更加容易取得突破性进展的原因。