第二章、神经网络从初级到深度入门讲解
2.1 神经网络从输入到输出
神经网络概念
人工神经网络:仿照大脑,接受刺激,神经元进行处理,输出结果
人工神经网络三个部分:
- 输入
- 内部处理
- 输出
神经网络分类:
- 初级神经网络/单神经元神经网络
- 浅层神经网络/两层神经网络
- 深度神经网络/多层神经网络
(这里的深度特指层数,层数越大深度越大)
数据输入和处理
输入数据处理:
- 特征向量(以图像为例):x,即将三通道像素点按独列排布
- 权值:w,代表每个特征重要程度
- 偏置(阈值):b,影响预测结果
- 逻辑回归公式:z(w,b;x) = (x1w1+x2w2+x3w3)+ b
- 激活函数:y’ = σ(z),经常用于修饰逻辑回归函数,将模型输出结果转化为预测结果,这样处理的预测结果不会波动太大,便于神经网络后续计算
(这里可以理解为,将逻辑回归的波动较大的值,激活到一个区间内,比如常用的sigmoid激活函数,激活到[0,1],用于表示概率)
数据评价
处理后数据的判断:
- 损失函数:L(y’,y)用于评价激活函数的输出结果(y‘ = σ(z) = σ(wx+b))和人为设置的实际结果(y)之间的差异。例如平方误差损失函数,交叉熵损失函数
- 成本函数:J(w,b)损失函数是针对单个样本的,多个样本的损失均值通常称为成本函数。成本函数的值直接关系到模型的预测效果。
监督学习
监督学习:训练数据存在标签
无监督学习:训练数据没有标签,例如聚类(即将拥有共同特征的样本归类)
2.2 初级神经网络入门指南
神经网络本质
训练的本质:逐步改变w和b的值,最终使得输出的损失函数越来越小,网络预测更加精确
训练的手段:前向传播预测,反向更新调整
训练核心:梯度下降
成本函数:J(w,b)
这个函数是关于w和b的函数,那么计算出w和b的偏导,这里表示为微分dw和db,再分别乘以学习率a,对原有的w和b进行修正,就完成了一次更新
w = w-adw
b = b-bdb
此外更新过程中,dw和db会变得越来越小,因此训练的速度会越来越慢
学习率的设置非常关键,过小训练速度太慢,过大训练会发生振荡,训练结果不佳
单样本训练参数更新流程
即多样本的m=1的情况
多样本训练参数更新流程
第一步:变量初始化
第二步:m个样本前向传播(for i=1 in m循环每个样本i,计算zi,再用zi计算yi‘,再用yi’和yi计算损失函数Li‘,将每个Li’累加,for循环结束获得成本函数 J)
第三步:反向传播:
- 依然是在第一步的for循环内,利用交叉熵损失函数的偏导公式(dw = x(y’-y), db = y’-y),对w和b求偏导,并且累加起来
- 到这里for循环结束。因为成本函数是一个累加值,因此偏导需要除以样本总数m,即求均值;这里也体现了一个反向传播的重要思想,即每次成本函数获取代表一次参数更新,而且是利用样本总体进行总体最优的均值更新,而不是百分百满足每个样本的需求。
- 利用 参数更新公式 更新参数。返回第二步
2.3 浅层神经网络入门指南
浅层神经网络
浅层神经网络是由多个初级神经网络组成的
通常网络结构越深,学到的特征信息也越多
增加每层神经元数量、增加层数都是加深网络结构的方式
层数过大会导致过拟合
单个样本的前向反向传播
即多样本的m=1的情况
多个样本的前向反向传播
和2.2类似,不同的是链式法则较复杂一些,会牵扯到多层
这里需要深刻理解x,z,a/y’之间的函数关系
简记:
- x是第一层的输入,a是每一层的输出,也可是第i层(i>=2)的输入
- z是逻辑回归结果,wx+b(wa+b),需要激活函数处理
- x和a都是激活函数处理后的模样,特殊的是x默认已经处理好
- a都是由z激活而来
- 最后一层的a就是y’
2.3 浅层神经网络入门指南
深度神经网络的意义
深度特指层数而不是每层的神经元数量
深度神经网络,即高层神经网络的意义在于模型学习效果更好,原因在于(以人脸为例):
- 第一层会学习最基本的边缘方向特征
- 第二层学习鼻子眼睛等不同器官特征
- 第三层学习由不同局部特征组合的特征,比如左边脸,右边脸
- 后面的层数学习会更加清晰,站在前人的肩膀上学习,站得高看得远
快速构建网络-迁移学习
在数据集不足以支撑模型训练时,是否可以利用其他已经训练好的模型进行训练?
这里需要介绍非常牛逼的方法:迁移学习
迁移学习的原理(以猫狗脸识别为例):
如果现在需要一个狗脸识别的训练模型,但是数据集非常有限,但此时有一个非常好的识别猫脸的模型,那么就可以利用这个猫脸模型。猫脸模型学习的特征是随层数增加而愈发复杂的,因此可以直接在猫脸检测网络的基础上进行修改。
迁移学习的具体操作:
- 删除猫脸模型最后一层的神经元以及相关的w和b
- 连接新一层的的神经元,给神经元设置随机的参数值(这两步加起来就等于替换掉了最后一层)
- 这时再采用狗脸数据进行训练
- 微调(fine-tuning):狗脸图片很少时,将前几层参数固定,只训练新层。
- 预训练(pre-training):在猫的参数基础上,整体训练更新所有参数。
这里是采用替换最后一层的方式,当然也可以选择砍掉一层后添加两层,扩充整个结构的层数
迁移学习的具体场景:
- 训练数据很少时:比如图片类(CT片),语音类(专有词汇)
- 训练数据类型相同:即图像迁移图像,语音迁移语音,不能语音和图像模型相互迁移。
- 迁移与被迁移的系统需要具有共同基本特征:比如识别猫和狗都要识别出线条、形状,但是如果将猫狗的模型迁移到飞机识别上,效果可能就不是很好。