如何决定神经网络的层数和一层的神经元个数?

原文地址https://zhuanlan.zhihu.com/p/47519999
非常形象的解释了上述问题

如何决定神经网络的层数和一层的神经元个数?_第1张图片

一个层中加入很多神经元,相当于在用很多直线逼近于一个弯曲的线

隐藏层的下一层起连接作用可以用公式理解隐藏层的输出都合并到了下一层的公式中,相当于连接了起来
类似下图的公式如何决定神经网络的层数和一层的神经元个数?_第2张图片
当然上述的第一个图只是快速判断层数和神经元的方法,说法还是有些小误并不是严格的,增加隐藏层而不用激活函数的话是无法解决非线性问题的,因为最后的公式还是会退化成线性函数(隐藏层虽然有了很多直线,但是到了输出层就被压缩成直线了前功尽弃),如上图
所以还是得用激活函数,
不用激活函数,顶多最后得到的是一个复杂的线性函数但得不到直接的结果,需要人工判断
如何决定神经网络的层数和一层的神经元个数?_第3张图片
所以简单的方法是一层隐藏层,在输出层前加一个激活函数sigmoid之类的来直接得到分类结果的值(标签)(可以很好的形象理解,两条直线的弯曲的连接由激活函数实现的,当然严格上差点意思)
如何决定神经网络的层数和一层的神经元个数?_第4张图片

另外有一些证明表面深层网络优于增加网络的宽度,当层数变多的时候就不要试着形象理解了很难解释的
至于怎么形象理解加入激活函数后的图下面我有讲,但是事实上谁也描述不出来加入激活函数后构成的图

加入激活函数有什么用?

1.多层神经网络的基础,保证多层网络不退化成单层线性网络。即加入非线性性质
2.不是所有信息都是有用的,一些只是噪音。激活函数可以帮助神经网络做这种隔离。它激活有用的信息,并抑制无关的数据点。
3.处处可微
4.使输出范围有限
5.归一化
6.加速收敛

激活函数与多个神经元的组合效果形象理解
激活函数可以使得非线性的问题转为类似于核函数的作用变换到高维空间变成线性可分
多个神经元都经过激活函数后的意义可理解为变成高维后再通过几条直线(对应神经元数)就可以进行分类
激活函数的使用相当于把分割线的直线变得弯曲了可以分类非线性的问题
也可以接着之前的形象理解,每条弯曲的线够成再由弯曲连接(下一层的激活函数)连起
如下
如何决定神经网络的层数和一层的神经元个数?_第5张图片

ps:
由于噪音的存在,loss一般不可能降到0

以上的一些图来自下面,解释了为何用激活函数,还是解释的挺好的,虽然里面有点瑕疵
如这里,应该由我上面的解释
如何决定神经网络的层数和一层的神经元个数?_第6张图片
全图:

你可能感兴趣的:(机器学习笔记,神经网络,深度学习)