理论-神经网络架构简单介绍
以下内容笔记出自‘跟着迪哥学python数据分析与机器学习实战’,外加个人整理添加,仅供个人复习使用。
神经网络的整体框架:
- 输入层:样本特征
- 隐藏层1:神经网络按照某种线性组合关系将所有特征重新进行组合
- 隐藏层2:之前的隐藏层1的特征变换不够强大,可以继续对特征做变换处理
- 输出层:根据分类还是回归任务,选择合适的输出结果和损失函数
比如函数计算:
单层:
双层:
**函数
上面都是在得到预测分值的基础上讨论的,如何得到这个分值?
我们知道,神经网络的运作模式是,将数据输入后,一层层对特征进行变换,最后通过损失函数评估当前效果(前向传播),然后选择合适的优化方法,反向传播,逐层更新权重参数。
那么如果层和层之间都是线性变换,那只需要一组权重参数代表其余所有的乘积就可以了(化简后),这样的缺点是:
1.非线性问题无法解决;2.需要对变换的特征嘉怡筛选,让有价值的权重特征发挥更大作用!
因此,简单线性函数不能满足需求,需要**函数!
常见**函数有sigmoid函数,tanh函数和Relu函数。
-
signoid函数:
sigmoid函数在数值较大时,导数接近于0,由于反向传播是逐层进行的,如果某一层梯度为0,后面所有的网络层都不会进行更新,这是sigmoid函数最大的问题。 -
tanh函数:
tanh函数的优点是关于原点对称,但同样没有解决梯度消失问题,淘汰。 -
Relu函数:
比较简单,非线性函数,解决了梯度消失问题,比较常用。
需要考虑的问题
数据预处理
- 数值:标准化
- 图像数据:resize到统一规模,像素点压缩
- 文本数据:词向量转换
- …
Drop-Out
每次训练中,随机杀死一部分神经元,防止过拟合。
数据增强
没有数据创造数据。