美文网首页
机器学习笔记

机器学习笔记

作者: 潇萧之炎 | 来源:发表于2019-04-25 21:55 被阅读0次

(一)机器学习
一.理论算法部分
1. 逻辑回归
二分类---》极大似然(确定性)----》熵(加了负号+log,就是一种不确定性)
--》交叉熵 (全概率)-----》二分类的损失函数(只能用于做分类)

  1. likelyhood_softmax(似然交叉熵函数)
    多分类---》使用了全概率来对物体进行多分类的判断同时又将预测值划为0~1
    之间--》最后是判断哪个位置上的概率最大,则就判断为是哪一类-------》
    因此可以科学得进行多分类的判断

  2. 注意一点:在深度网络中,导数第二层输出使用softmax激活,而不再采用
    sigmoid\relu\tanh\leacy_relu这些作为 Active Funcition;softmax也可以
    理解为一种特殊的激活函数;从上可以看出,倒数第二层实际上已经成为了
    整个网络预测的最后一层,那么用softmax激活的那一次实际上是对输出值的
    归一化和后验概率化(用全概率去计算最终属于哪一类的概率)。

  3. dropout不是一种激活函数,而是一种对神经网络(neural network)结构的调整。
    通过对神经网络结构的调整,类似建立了多个不同结构的神经网络,等同于随机
    森林中建立的不同种类的树。

  4. 归一化(分多类)\PCA\随机森林\dropout都是奥卡姆剃刀原理的应运,其中归一化
    是最简单的一种逼近方式;随机森林和dropout分别是机器学习和深度学习中最好
    一种稀疏化方法。

  5. lossFunction 和 optimizer 要分清楚,一个是损失函数,一个是优化器。
    极大似然是机器学习的基础、奥卡姆剃刀原理,深度学习是机器学习的一个分支

二.机器学习(tensorflow或者深度学习)工程化构建代码的步骤:
1.导包
2.导入已知数据或者构造含有标签y的样本(实例)
3.使用tensorflow框架构造目标函数----->wx+b=y_hat,及函数所需变量的定义
4.构造损失函数,因为做的是线性回归,所以损失函数使用最小二乘法而不是
交叉熵函数
5.损失函数定义好之后就应该去定义求解损失函数的优化器 --->GD
6.创建一个信息输出函数,并且创建会话,对模型进行训练(使用梯度下降的
方法来计算w&b)
导包---导入样本---构造目标函数---构造损失函数---求解优化器---创建会话训练

三.一般来说,我们在训练模型的过程中的停止条件有以下一些:
1.如果损失函数低于某个阈值;
while True:
pass
if r_loss < 0.01:
break
2. 当损失在更新的过程中趋于稳定,不再下降,则停止;
while True:#小于某个阈值而停止
会话.run(优化器传参)
r_w, r_b, r_loss = 会话.run([权重, 偏置, 损失函数])
loss_list.append(r_loss)
print_info(r_w, r_b, r_loss)
count_num+=1
if len(loss_list)>=2 and np.abs(loss_list[-1]-loss_list[-2])<0.00000000001:
print("earlyStop is {}".format(count_num))
break
2.当epoch迭代次数达到某个值的时候停止:
比如说epoch达到10000次则停止,这种方式不能保证模型精度,
一般是在模型快速工程化或者工程预估的时候才使用

(二)深度学习
一.深度学习应用场景分支:
1, 计算机视觉------>图像识别(要求图片上只有一个物体,或者绝大多数区域只有1个物体,
难度指数:2颗星 )、目标检测(图片上可以有多重物体,难度指数:五颗星)
ps: 在计算机视觉领域,我们同样可以对数据进行上采样,即图像增强(翻转、随机裁剪)。
但是,在一些严谨的领域不能使用图像增强(要考虑领域的严谨性或者代价)。

  1. 计算机语言------->CMU(卡内基梅隆大学)、斯坦福、哈工大
    对话方面的工程应用:
    机器翻译-->seq2seq(机器学习经典框架)
    聊天机器人----> 意图识别(垂直搜索) + seq2seq(序列对序列)
    语音识别 ----> 翻译笔、智能家电声控
    ps:唤醒词不能太过于简单

二.深度学习中"约等于"的含义:
"约等于"是为了防止模型过拟合,增加模型泛化能力的一种表现,具体可以理解为用N个方程去解有限个少量的未知数;实际上其效果和PCA、LDA、归一化、惩罚项目加入、relu的本质效果是一样的,只是出发点不同而已。

三.深度学习神经网络框架:
mlp(Multilayer perceptron多层感知机)=FC(fully connected) =DNN=传统神经网络
计算机视觉--------- > CNN(convolutional neural network)
NLP(neural linguished programming )------------->RNN(recurent neural network)

ps: 我们平常说的DNN(deep neural network)就是指FC网络结构,即mlp(多层感知机);但是,目前工程上使用的网络框架以CNN&RNN为主,也就是说,不会在单独使用mlp来建模,mlp由于横向高扩展性被更多地作为了CNN&RNN的网络输出部分连接sofmax映射。

四.DNN/CNN/RNN 网络特点
首先要明确的几点:
1,网络结构越深,则模型的精度越高;
2, 但是网络不能无限深,因为过深的网络由于梯度小时会导致网络退化
3, 过拟合和网络退化是有区别的,前者是在训练集上的效果好,在测试集
上的效果很差;后者的表现则是在测试集上的效果很差,在训练集上的效果也很差;
4,但是,残差神经网络(res net)针对这个问题,解决了BP传播随着网络
深度而减小的问题,因此,目前最深的res net可达154层。

五.激活函数的特点:
1. 目前所学习到的最后一层激活函数为交叉熵函数
(cross_entropy_function & softmax_cross_entropy_function) ,但是不唯一,不固定,
也可以用一些新的算法来取代以上两种激活函数,但是新的算法必须是建立在以上两种算法研究的基础上,或者具有可解释性(negative_sampling)和可复制性。

   2. 值得说明的是,深度学习中的"激活函数"其实就是机器学习中的"核函数",

什么样的函数可以成为核函数呢?
---------->能够使得原来样本矩阵变成半正定矩阵的一种映射方法即可成为
核函数,即就是能够让原来的数据集系数化的一种映射方法。

六. 深度网络和机器学习在理论上的异同点:

  1. 深度学习网络softmax层的激活函数就相当于机器学习的核函数
    ---> 起到对实例进行分类的作用;
    2.然而,sofmax层之前的网络(CNN\RNN\DNN\MLP)是对源数据做特征提取,
    ---> 即等同于机器学习中的特征工程,与机器学习不同的是,深度学习中的特征工程是网络自己完成的,而机器学习中的特征工程则是人工完成的。
    3.那么,深度学习工程师的主要工作是什么呢?
    ---> 就是"调参"

七、 神经网络初始化的时候,一般w给定的值为满足均值为0,方差为1的正态分布值;b则以置0为主。

八、BP&FP 前向传导和反向更新
神经网络的前向传导:FP: forward Propagation
神经网络的反向更新:BP: back Propagation

一般来说,如果我们训练深度模型,则BP和FP一起使用;如果只进行预测那么只用FP;我们还可以这样去描述整个训练的过程:最开随机产生的w&b用来FP计算,FP为下一时刻的BP提供能量,下一次的BP又为接下来的FP提供更新后的w&b,直到达到更新终止条件。
PS:只有在训练阶段才需要FP&BP同时迭代进行,而在测试阶段则只需要FP即可。

(三)图像处理模型CNN及其变种

1.DNN = MLP = FC = 传统意义上的神经网络,目前来说,这种网络已经不会
单独存在使用,而是作为CNN(图像处理)和RNN(自然语言处理)网络的后端部分。

2.关于复杂度的解释:参数越少模型越简单,反之。
卷积神经网络的优势:
①降低复杂度的原因是:因为特征图中的像素提取在按照步长移动的时候,是共享
1个卷积核中的参数的,所以说大大减少了参数的数量,课堂案例中的参数是
传统神经网络的1/26!

②卷积神经网络相比于传统DNN来说,解决了无关特征共同映射的问题(猫狗举例),
使得局部图像属性更加凸显-------》是否卷积核越小就会越好呢?
首先要明确的一点是:
大的卷积核容易会得到更多的信息,使得收敛加快或者 不收敛,但是也容易圈入多类物体,使得分类不精确,容易造成模型鲁棒性降低;
但是小的卷积核也不是非常完美,尽管可以使得分类的精度很高,但是由于信息量
低,会造成收敛过慢-------》
相比较之下,我们选小的卷积核,原因是:收敛慢可以通过加深网络深度和GPU加速来克服;而精度不能保证,则是短期内难以克服的。

总得说来,CNN卷积神经网络的优点是:降低模型复杂度同时可以保证更高的识别精度。
缺点是:在训练的时候由于网络过深需要消耗更多的计算资源。

3.关于L1, L2正则:
L1、L2正则也叫weight deacy, 其目的是为了减少权重,如果惩罚系数
lamba过大,可以直接导致原始矩阵稀疏化,因此可以很有效地防止过拟合;
一般来说L2正则使用得比较多,那么L2还有一个非常学术的名字叫做:岭回归。

(四)CNN框架及注意事项
1.CNN包括RNN损失函数跟传统的DNN是一样的---> likelyhood-softmax
2.CNN反向传播全连接的部分跟DNN是相同的,在卷积部分,池化层(就是全连接部分的输入层)向卷积层的bp,是把梯度传给卷积层中值最大的那个位置保留,所以整个更新的计算量是平均值的1/4。
3.CNN网络的发展过程:
LeNet--->Vgg系列---->ResNet(残差神经网络)---->GoogleNet(谷歌网络)
Desnet(稠密网络)--->FocusLoss损失函数---->Darknet(集成了RestNet和GoogleNet的大成)

4.深度学习中的参数名词解释:
batch_size --->每次带入模型的样本数; epoch ---->整个样本循环的遍数
batch_size_nums ---->当循环完一个epoch时,所执行batch_size 的批数。
比如说:有10000个样本,循环2遍,每次更新模型的时候带入100个样本,那么10000/100=100,
其中循环的遍数就是epoch的值;带入的100个样本就是batch_size;
10000/100 = 100 就是batch_size_nums. 这几个都是超参数,需要在模型训练的过程中去调参。
学习率的调节方法:可以去试,但是要求经验比较丰富,如果经验不足则可以选择adam损失函数,因为adam损失函数可以自行调整学习率到最优。

注意:以上超参的调整方式,不光是卷积神经网络有,所有神经网络都有的。
在很多复杂的高级算法模型中,经常会使用LeNet、AlexNet、ZfNet、NinNet(因为这些网络比较轻便)来对网络的局部或者数据做一些处理,所以,LeNet如果掌握比较熟练,其它网络可以很容易理解。

5.深度学习图像网络分类及特点:
(1) VGG 系列:
这个系列可以满足一般的工程应用,所使用的卷积核都未33,偶尔会使用11;
VGG网络从整个架构而言,是分为5段的,目前效果最好的是VGG16而不是19;
另外,值得一提的是,我们在定义网络深度的时候是以可以引入参数的网络计做1层的。
注意:VGG网络中,卷积部分的步长(stride)均为1; 池化部分的步长均为2,且池化部分所使用的感知野的大小均为2*2.

(2) ResNet:首先,残差神经网络是根据VGG网络来的,那么其相比较于VGG网络来说,有以下三个优点:
①,证明了随着网络加深进度不断上升的结论
②,在与plainNet同样深度的时候可以有更高的精确率
③,与plainNet层数相同时,所做的改进不需要引入新的参数。
注意:残差神经网络是每两个卷积层做一次Identity shortCut;另外,网络中虚线
的部分代表通道数翻倍;在做identity的时候,是中心点对应相加。

(3)GoogleNet:
谷歌卷积网络相比于传统卷积网络来说,在横向和纵向都可以扩张卷积结构,且纵向延伸过程中使用到了1*1的卷积核,这样就可以在不增加太多参数的情况下,识别图片中更小的物体从而提高识别精度;横向扩展则可以捕捉到更多的局域像素点之间的关联性,因此Inception机构会比传统VGG网络具有更高的精确度和稳定性。

GoogleNet DepthContact  计算细节(naive版的):
https://blog.csdn.net/ybdesire/article/details/80628586

相关文章

网友评论

      本文标题:机器学习笔记

      本文链接:https://www.haomeiwen.com/subject/uoapgqtx.html