3.4多层感知机
手工特征工程到学习特征的范式转变:将特征工程的过程也纳入端到端的学习框架中,让模型从原始数据中自动学习最优的表示(representation),而不是依赖人工设计的特征。
数据与计算需求:神经网络通常需要更多的训练数据和更强的计算能力
架构多样性:针对不同数据结构设计的网络架构:
1.多层感知机 (MLP):处理结构化,表格数据
2.卷积神经网络 (CNN):处理图像等网格数据
3.循环神经网络 (RNN):处理序列,时序数据
4.注意力机制 (Attention):处理长距离依赖关系
先验知识融入:通过架构设计(如 CNN 的局部连接、RNN 的时序建模)将领域知识编码进网络结构
dense层:全连接层
线性回归可以看成是,有1个输出的全连接层
引入非线性因素(线性局限性):激活函数
有一个隐藏层的MLP:
(可以拓展到多个隐藏层)
这里的Activation为激活函数处理,实心dense层为隐藏层
代码示例:
卷积神经网络(全连接层->卷积层):
在处理图像问题时:
局部链接+权值共享:用极少的参数,通过在图像上滑动扫描,实现了对任意位置局部模式的检测
一个简单的单通道卷积的实现:
卷积对位置仍然敏感
虽然卷积通过权重共享实现了平移不变性,但这种不变性是有限的:
输入中模式的平移或旋转 -> 输出中模式的相似平移和旋转
换句话说,卷积特征图仍然精确记录了特征的位置信息。如果物体稍微移动,特征响应的位置也会跟着移动。对于分类任务,我们希望模型完全不关心物体的精确位置。(增加鲁棒性)
池化层(Pooling Layer):
在卷积输出后的 k×k 窗口内计算 均值(mean) 或 最大值(max)
实现降维和增强位置的鲁棒性
循环神经网络RNN:
假如说我们需要一个语言预测模型来判断下一个word,如果使用MLP输入为hello可以预测下一个为world,但如果输入world是否会预测下一个是!,因为没有上一个时序的信息hello,
而MLP问题的输入的维度是确定的不能hello world这样变换的输入,这样就需要我们的时序模型RNN了。
隐藏状态:我们认为隐藏状态包括了过去时间的所有信息(维度确定)
concat操作:将隐藏状态和当前状态合并
通过隐藏状态在时间步之间传递信息,让模型"记住"序列的历史上下文,从而处理变长序列数据。同一组参数在每个时间步复用,既减少了参数量,又实现了对任意长度序列的建模
一个简单的RNN模型结构:
简单 RNN 有一个致命缺陷:长期依赖问题(Long-term Dependency)
序列很长时,早期的信息在传递过程中逐渐衰减,爆炸
例如:"我出生在中国,...,所以我会说____",中间隔了很多词,"中国"这个信息很难传递到填空位置
解决的两种方法:
两种门(单独的参数去学习)的效果:
选择性记忆:重要的历史信息可以长期保留
选择性遗忘:不相关的信息被及时清除
双向RNN:
可以得到前后两个方向的信息:既能根据过去也能依靠未来。
输出:两个方向的隐藏状态拼接或融合
前提:能够拿到整个信息的内容(完形填空)
Deep RNN:通过堆叠多层提取层次化的时序特征
模型选择的核心原则:让模型结构与数据的内在结构相匹配。