我的目的是传递灵感,图片显示异常请直接下载【免费】西瓜书第五章,标题1个字资源-CSDN文库
周志华老师亲讲-西瓜书全网最详尽讲解-1080p高清原版《机器学习初步》_哔哩哔哩_bilibili
神经网络:由简单单元组成的广泛并行互联网络,在机器学习领域主要探讨其学习机制
神经元模型:每个神经元都接收到其他n个神经元的输入信号,将神经元接收到的总输入值与神经元的阈值作比较,当输入值大于阈值时,神经元就被激活,产生一个输出信号,最后通过激活函数处理来产生神经元的输出信号
阶跃函数是理想的激活函数,但是不连续,不可微。所以用S型函数来近似,输出是连续的概率值
由下图可知,当总输入值小于阈值时,映射为0,反之为1。1对应于神经元兴奋,会向其他神经元输出信号,0对应神经元抑制,不会输出信号
神经元模型内层是线性的,外层是非线性的激活函数,激活函数作用是让神经网络能够表示非线性关系,通过不断的学习,就能得到输入与输出之间的非线性关系
感知机:由两层神经元构成, 输入层接收输入信号后传递给输出层,输出层是M-P神经元,
虽然有两层神经元,但实际上只有输出层神经元进行了激活函数处理
可以实现逻辑与、或、非运算这样的线性可分问题,但不能解决异或这样的非线性可分问题
单层感知机的本质是一个线性分类器,先通过权重加权输入特征值并减去阈值,然后通过激活函数处理 |
这里只计算一下逻辑与问题示例 先使用合适的权重和阈值构造感知机
|
那么重点是找到合适的权重与阈值来组成模型
对与:例如输入是1和1,按照与的定义,同真才真
对或:例如输入是0和0,按照或的定义,一真则真
对非:例如输入是1,按照非的定义,将输入值取反
线性可分:用一个线性函数将两类样本完美分开 |
可以看到感知机(两层神经元构成)无法解决非线性可分问题,所以引入多层神经元网络
功能性神经元:包含激活函数的神经元→所以隐含层和输出层神经元都为功能性神经元
多层神经元网络包含:输入层,隐含层,输出层
下面构建一个多层神经元网络来解决异或问题(异或定义:输入值相同取假,不同取真)
权重 |
假设输入为1和1,那么隐含层的输出就是0和0,输出层结果为0
假设输入为1和0,那么隐含层的输出就是1和0,输出层结果为1
通过这个例子可以看出,权重和阈值的取值十分重要,这决定能否解决问题,也说明多层神经网络能解决更复杂的问题
-------------------------------------------------------------------------------
多层前馈网络:只需一个包含足够多神经元的隐含层,就能以任意精度逼近任意连续函数,但如何设置隐含层的神经元个数是一个问题,一般视目标函数的复杂度而定
多层:多个隐含层,只有隐含层和输出层对信号进行激活函数处理,输入层神经元仅接收信号
前馈:神经元之间不存在同层连接,也不存在跨层连接,从输入层到输出层的单向传播
Q:隐含层数量和隐含层当中的神经元个数对神经网络模型分别有什么影响?此处不展开
输出层的神经元数量一般设置为需要分类的类别个数 |
单层感知机(不含隐含层)只能实现线性分类任务,而只需包含一个隐含层的神经网络即可拥有万有逼近能力
二分类问题通常使用单个输出层神经元配合Sigmoid激活函数,因为它输出一个值,表示样本属于某个类别的概率 多分类问题通常使用多个输出层神经元配合Softmax激活函数,因为它输出的是多个值的概率分布 |
Ex:建立一个神经网络模型来识别水果图片,具体要区分苹果、香蕉和橙子这三种水果。在这种情况下,输出层就应该设计为包含3个神经元,每个神经元代表一种水果类型的预测概率(用softmax作激活函数即可得到预测概率)
- 第一个神经元的输出为模型认为图片是苹果的概率
- 第二个神经元的输出为模型认为图片为香蕉的概率
- 第三个神经元的输出为模型认为图片是橙子的概率
在训练过程中,理想情况下,当输入一张苹果的图片时,模型会调整权重和阈值,使得第一个神经元的输出接近1,而其他两个神经元的输出接近0
同理对于香蕉和橙子的图片,相应神经元输出概率会较高,其他神经元的输出概率会较低
那么具体来说,权重与阈值如何学得?
1)将阈值看作一个输入
2)人为设定学习率,这个学习率上决定了w的变化速率(向最佳w靠近的速率)
反向传播算法(误差逆传播算法):
输入值x为d维属性 |
θ为输出层神经元的阈值 →接着得到误差函数 算法目标显然是最小化误差函数 也就是找到最佳的权重与阈值 |
BP算法流程:
Step0:随机初始化权重和阈值(一般设为较小值,如0.01)
Step1:输入值提供给隐含层,最后传至输出层经处理后得到结果,计算输出结果与真实值的差
Step2:将差值传回隐含层,并将误差分摊给所有隐含层的神经元,根据误差来修正权重与阈值
Step3:重复Step1和Step2直到误差小于某个可接受范围
根据梯度下降策略得到5.11~5.14的四个参数修正公式
例如隐含层的权重更新公式:
学习率过大会导致震荡,过小会导致训练时间过长 |
BP算法求得的参数包括输出层的权重与阈值,隐含层的权重与阈值 |
上面提到的标准BP算法进行更新参数指的是每一次针对单个输入样例来调整权重与阈值,那么有可能这一次调整往东,下一次往西,造成抵消,这会增加迭代次数
累积BP算法:一次性读取完整个训练集后再对权重和阈值进行更新
由于多层神经网络表示能力非常强,所以可能会导致过拟合
缓解办法如下:
早停法:将训练数据分为训练集和验证集,当神经网络在训练集上误差减小,在验证集上误差增大,此时停止训练
或者使用正则化(在损失函数中加入惩罚项来防止过拟合。L1正则化将权重参数的绝对值之和作为惩罚项,L2正则化将权重参数的平方和作为惩罚项,从而使拟合曲线更加平滑,避免对复杂模型的过拟合)
-------------------------------------------------------------------------------
全局最小与局部最小: 学习的过程实质上就是一个寻找最优参数的过程,例如前面的BP算法使用梯度下降策略寻找使误差最小的权重与阈值
全局最小是局部最小的一种特殊情况,全局最小意味着在整个参数空间中找到的最优解,而局部最小是在某邻域内的最优解,所以可能存在多个局部最小点
需要注意的是E是一个关于权重w和阈值θ的代价函数,那么对于此函数,函数值下降最快的方向自然是负梯度方向 |
由于前面使用的是梯度下降策略来寻找最佳参数使得误差最小,也就是沿着负梯度方向搜索最优解(误差下降最快的方向),那么当梯度为0时,已达到局部最小误差,更新量0
但无法确定此局部最小误差是否就是全局最小误差,因此提出几种策略来寻找全局最小误差
多启动点策略:用多组不同的参数初始化多个神经网络,按标准BP算法训练后,取其中最小的局部误差的解作为最终参数
其他寻找全局最小的策略:随机梯度下降,模拟退火…等等
深度学习(多层网络模型): 理论上参数越多的模型复杂度就越高,从而能完成更复杂的学习任务
如何使模型更复杂?
1)增加隐含层数:激活函数嵌套层数增多,模型能够不断进行非线性变换
2)增加隐含层神经元数:模型能够学习到更复杂的映射关系,表达能力更强
A Neural Network Playground (tensorflow.org) 可视化神经网络(多层感知机模型)
超有趣的神经网络可视化工具Tensorflow-Playground_哔哩哔哩_bilibili (视频教学)
总结:构建一个神经网络模型要关注以下几点
1:隐含层层数
2:隐含层神经元个数
3:激活函数
4:特征(输入值在不同维度上的表达)
输入层面要引入样本输入的真实特征(例如高幂次,非线性)
模型层面通过激活函数引入非线性的表达,如果没有激活函数,输出层只是输入层的线性组合
特征工程: 对输入数据进行转换,选择,构造。为模型提供更易学习和处理的输入特征
1)数据清洗:移除噪声、处理缺失值、去除异常值
2)类别编码:将类别特征转换为数值特征(例如离散属性值化为连续值或K维向量)
3)归一化和标准化:将数值特征缩放到同一尺度(标准化使数据分布的均值=0,方差=1)
4)特征选择:挑选对预测最有意义的特征,去除无关的特征,减少模型复杂度,防止过拟合
上面介绍的神经网络模型仅限于多层感知机模型,其他如CNN,RNN模型,虽然他们的基本单元都是MP神经元,但是这几种神经网络的构造与工作方式各不相同
参考资料: 深度学习之BP算法-CSDN博客
一篇文章完全搞懂正则化(Regularization)-CSDN博客
【周志华机器学习】五、神经网络_神经网络 周志华-CSDN博客
[转载]什么是机器学习正则化?L1正则化?L2正则化?_nerf 机器学习-CSDN博客