目录
1. 感知机
XOR(异或)问题
- 一个经典的非线性问题,它不能通过简单的线性分类器(只能区分1个特征)来解决
- 在二维空间中,XOR问题通常涉及两个轴(2个特征),其数据点分布在四个象限中;但属于同一类别的点并不是沿着任一单个轴排列的,而是以对角线的方式排列
2. 多层感知机
2.1 XOR(单分类)
- 多层感知机就是组合多个 (相对简单的) 函数,进行更复杂的分类
- 隐藏层(Hidden layer)的大小是超参数!
- 输入x:是n维向量
- 单分类:通常指二分类,网络有一个输出节点,这个值被解释为属于某一类别的概率
- 上图中的该神经网络具有一个输出层(Output layer),其中包含三个神经元(o1, o2, o3),是多分类的配图
- 输出层只有一个神经元的才是单分类!(也就是“学习XOR那张图”)
2.2 为何需要 (非线性) 激活函数?
如果忘记加激活函数(或者激活函数是线性的):
- 输出层的每个神经元的输出将仅仅是输入的加权和
- 最后的结果就变回了单层的(最简单的)感知机,模型还是简单线性的分类器
激活函数的作用:
- 它决定了神经元是否应该被激活,即是否应该传递信号到下一层
- 它对输入信号进行非线性变换
2.3 经典激活函数(Sigmoid、Tanh、ReLU)
- 在双曲正切(tanh)激活函数中,参数 -2 是一个缩放因子,它用于控制函数的斜率或陡峭程度
李沐老师:
- 如何让函数变成非线性?ReLU在0点拐个弯,就办到啦
- ReLU函数的主要好处是算得快!(前两个激活函数用到的指数运算是很贵的,特别是在CPU上,在GPU上算指数也不便宜,还得是ReLU函数快好省~)
- 因为ReLU很简单,大家用得多一点
2.4 多类分类
- softmax 操作子:将所有输出拉(归一化)到 (0,1) 之间,所有输出之和为1
- softmax 模型加一层隐藏层,模型的名字就会变成多层感知器
2.5 多隐藏层
2.6 调参(两种基本思路)
设置超参数(调参)需要凭借经验,(根据输入和输出的大小)有两种基本思路:
- 只设一个隐藏层,只有一层,根据输入和输出的大小,可大可小
- 不断提炼信息:深一点,设置多层,但一层比一层小(太大的话计算机吃不消),一般 m1 > m2 > m3 ... 越深越小
李沐老师:
- 机器学习的本质就是压缩,比如 图像 (输入复杂) 的分类 (输出简单)
- 设置超参数,没有太多科学,纯粹靠手感 [ doge ]
2.7 总结
3. 代码实现(pytorch)
代码下载:《动手学深度学习》 — 动手学深度学习 2.0.0 documentation,网页上方点击jupyter记事本下载代码
3.1 从零实现
代码文件夹目录:chapter_multilayer-perceptrons/mlp-scratch.ipynb
可能的报错与解法
3.2 简洁实现
标签:输出,1.6,函数,ReLU,感知机,多层,激活 From: https://blog.csdn.net/weixin_57972634/article/details/142332628李沐老师:
- 多层感知机,对比softmax,从代码层面没有太多区别,只是多了一点点(隐藏层)
- 这也是为啥大家都喜欢用mlp而不是svm
- 再怎么改模型,调的东西并不多
(这侧面印证了“飞轮效应”)