前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么神经网络需要解决多层和非线性问题

为什么神经网络需要解决多层和非线性问题

作者头像
狼啸风云
修改2022-09-04 22:06:07
4.9K0
修改2022-09-04 22:06:07
举报

维基百科对深度学习的精确定义为“一类通过多层非线性变换对高复杂性数据建模算法的合集”。因为深度神经网络是实现“多层非线性变换”最常用的一种方法,所以在实际中基本上可以认为深度学习就是深度神经网络的代名词。从维基百科给出的定义可以看出,深度学习有两个个非常重要的概念,并将通过过具体样例------多层和非线性。那么为什么要强调这两个性质?先说明线性模型的局限性,再给出去线性化的方法,最后再说明使用多层的原因。

1、线性模型的局限性

在线性模型中,模型的输出为输入的加权和。假设一个模型的输出y和输入xi满足以下关系,那么这个模型就是一个线性模型。

y=\sum_{i} w_{i} x_{i}+b

其中w_{i}, b \in R 为模型参数。被称之为线性模型是因为当模型的输入只有一个的时候,x和y形成了二维坐标系上的一条。类似地,当模型有n个输入时,x和y形成了n+1维空间中的一个平面。而一个线性模型中通过输入得到输出的函数被称之为一个线性变换。上面的公式就是一个线性变换。线性模型的最大特点是任意线性模型的组合仍然还是线性模型。

因为线性模型就能解决线性可分问题,而在深度学习面对的问题至少是无法通过直线(或者高维空间的平面)划分的。在现实世界中,绝大部分的问题都是无法线性分割的。

2.激活函数实现去线性化

如果将每一个神经元(也就是神经网络中的节点)的输出通过一个非线性函数,那么整个神经网络的模型就不再是线性了。这个非线性函数就是激活函数。下图显示了加入激活函数和偏置项之后的神经元结构。

以下公式给出了神经网络结构加上激活函数和偏置项后的前向传播算法的数学定义:

\begin{aligned} & A_{1}=\left[a_{11}, a_{12}, a_{13}\right]=f\left(x W^{(1)}+b\right) \\ =& f\left(\left[x_{1}, x_{2}\right]\right)\left(\begin{array}{l} W_{1,1}^{(1)} \\ W_{1,2}^{(1)} \\ W_{2,1}^{(1)} W_{1,2}^{(1)} \\ W_{2,3}^{(1)} \end{array}\left[\left[b_{1}, b_{2}, b_{3}\right]\right)\right.\\ =& f\left(W_{1,1}^{(1)} x_{1}+W_{2,1}^{(1)} x_{2}+b_{1}, W_{1,2}^{(1)} x_{1}+W_{2,2}^{(1)} x_{2}+b_{2}, W_{1,3}^{(1)} x_{1}+W_{2,3}^{(1)} x_{2}+b_{3}\right) \\ =& {\left[f\left(W_{1,1}^{(1)} x_{1}+W_{2,1}^{(1)} x_{2}+b_{1}\right), f\left(W_{1,2}^{(1)} x_{1}+W_{2}^{(1)} x_{2}+b_{2}\right), f\left(W_{1,3}^{(1)} x_{1}+W_{2,3}^{(1)} x_{2}+b_{3}\right)\right] } \end{aligned}

相比于之前新的公式中增加了偏置项(bias),偏置项是神经网络中非常常用的一种结构。第二个改变就是每个节点的取值不再是单纯的加权和。每个节点的输出在加权和的基础上还做了一个非线性变换。下图展示了几种常用的非线性激活函数的的函数图像。

f(x)=\max (x, 0)
f(x)=\frac{1}{1+e^{-x}}
f(x)=\frac{1-e^{-2 x}}{1+e^{-2 x}}

这些激活函数的函数图像都不是一条直线。所以通过这些激活函数。每一个节点不再是线性变换,于是整个神经网络也就不再是线性的了,加入ReLU激活函数之后,神经网络的前行传播算法的计算方法为:

\begin{array}{l} a_{11}=f\left(W_{1,1}^{(1)} x_{1}+W_{2,1}^{(1)} x_{2}+b_{1}\right) \\ a_{12}=f\left(W_{1,2}^{(1)} x_{1}+W_{2,2}^{(1)} x_{2}+b_{2}\right) \\ a_{11}=f\left(W_{1,3}^{(1)} x_{1}+W_{2,3}^{(1)} x_{2}+b_{3}\right) \end{array}

输出层的公式为:Y=f\left(W_{1,1}^{(2)} a_{1,1}+W_{2,1}^{(2)} a_{1,2}+W_{3,1}^{(2)} a_{1,3}+b_{1}^{(2)}\right) 目前tensorflow提供了7中不同的非线性激活函数,tf.nn.relu、tf.sigmoid和tf.tanh是其中比较常用的几个。当然,tensorflow也支持使用自己定义的激活函数,下面的代码实现了神经网络的前向传播算法。

代码语言:javascript
复制
a = tf.nn.relu(tf.matmul(x, w1) + biases1)
y = tf.nn.relu(tf.matmul(a, w2) + biases2)

3.多层神经网络解决异或问题

在神经网络的发展历史上,一个很重要的问题就是疑惑问题。神经网络的理论模型由 Warren McCulloch和Walter Pitts在1943年首次提出,并在1958年由Frank Rosenblatt提出感知机(perceptron)模型,从数学上完成了对神经网络的精确建模。感知机可以简单地理解为单层的神经网络。感知机会将输入进行加权和,然后再通过激活函数最后得到输出。这个结构就是一个灭有隐藏层的神经网络。在上世纪60年代,神经网络作为对人类大脑的模拟算法受到了很多关注。然而到了1969年,Marvin Minsky和Seymour  Papert在Perceptrons:An Introduction to Computational Geometry一书中提出感知机无法模拟异或运算。

深层神经网络实际上有组合提取特征的功能。这个特征对于解决不以提取特征向量的问题(比如图片识别、语音识别等)有很大帮助。这也是深度学习在这些问题上更加容易取得突破性进展的原因。 

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年01月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、线性模型的局限性
  • 2.激活函数实现去线性化
  • 3.多层神经网络解决异或问题
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档