记一次深度学习培训的笔记

版权声明:出于感谢(如果有收获)或对知识的尊重,未经允许禁止转载 https://blog.csdn.net/bendan50/article/details/82024813

公司组织了一次培训,事后整理下笔记,希望不会因培训的结束而结束。希望可以系统点。

 

目录

1.发展历史提到了CYC知识库

1.1CYC知识库

1.2推理引擎

2、机器学习的四大类别

2.1回归-regression与分类-classification

2.2聚类-clustering

3、感知机

3.1和(AND)

3.2异或(XOR)运算

4、激活函数——必须为非线性函数

4.1最后一层神经元的激活函数选择

5、MNIST数据集

6、误差反向传播——计算图(局部计算)

7、过拟合问题解决

8、卷积神经网络CNN

8.1填充、步幅、池化层


参考文献:

http://www.baike.com/wiki/CYC%E9%A1%B9%E7%9B%AE

https://blog.csdn.net/jiangjunshow/article/details/79168250


1.发展历史提到了CYC知识库

深度学习,我的理解是:提问一个问题,然后经过网络(不同于HTTP/IP的网络概念)得出答案,深度学习就是构建并训练出这样的网络。

早期的CYC就是这样的一个知识库。Cyc知识库中表示的知识一般形如“每棵树都是植物”、“植物最终都会死亡”。当提出“树是否会死亡”的问题时,推理引擎可以得到正确的结论,并回答该问题。该知识库中包含了320万条人类定义的断言,涉及30万个概念,15000个谓词。这些资源都采取CycL语言来进行描述,该语言采取谓词代数描述,语法上与Lisp程序设计语言类似。

1.1CYC知识库

Cyc中的概念被称为“常量(constants)”。常量以"#$"开头并区分大小写。常量主要分为以下几类: 
  个体,即individuals:例如 #$BillClinton 又如 #$France。 
  集合,即Collections:例如 #$Tree-ThePlant (包含所有的树),又如 #$EquivalenceRelation (包含所有的等价关系)。集合中的个体被称为该集合的实例(instance)。 
  真值函数,即Truth Functions:该函数可被应用于一个或多个概念,并返回“真”或“假”。例如 #$siblings 表示兄弟姐妹关系,若两个参数对应的内容为兄弟姐妹关系,则该概念返回真值。约定真值函数以小写字母开头,并且可以被拆分为若干个逻辑连接词(例如 #$and、#$or、#$not、#$implies)、量词(#$forAll, #$thereExists 等等)以及谓词。 
  函数,即Functions:用于以现有术语为基础产生新的术语。例如 #$FruitFn 具有以下作用:若接收到用于描述一种(或一个集合)植物的声明,则会返回其果实。约定函数常量以大写字母开头,并以“Fn”作为结尾。 
  Cyc中的谓词最重要的是 #$isa 以及 #$genls。#$isa 表示某个对象是某个集合的个体(instance),#$genls 表示某个集合是另外一个集合的子集合。由概念构成的事实采用CycL语言描述的“句子”表示。谓词则写在与其相关的对象之前,并以括号括起来: 
  (#$isa #$BillClinton #$UnitedStatesPresident) 表示 “Bill Clinton属于美国总统集合”; 
  (#$genls #$Tree-ThePlant #$Plant) 表示“所有的树都是植物”; 
  (#$capitalCity #$France #$Paris) 表示“巴黎是法国的首都”。句子中可以包含变量,变量字符串以 "?"开头,这些句子被称为“规则”。与#$isa谓词有关的一条规则如下所示: 
  (#$implies 
  (#$and 
  (#$isa ?OBJ ?SUBSET) 
  (#$genls ?SUBSET ?SUPERSET)) 
  (#$isa ?OBJ ?SUPERSET)) 
  上面的规则可解释为:"若OBJ为集合SUBSET中的一个实例,并且SUBSET是SUPERSET的子集,则OBJ是集合SUPERSET的一个实例。下面再给出另外一个典型的示例: 
  (#$relationAllExists #$biologicalMother #$ChordataPhylum #$FemaleAnimal) 上面的规则可解释为:对于脊索动物(chordate)集合#$ChordataPhylum中的所有实例,都存在一个母性动物(为#$FemaleAnimal的实例)作为其母亲(通过谓词#$biologicalMother描述)。 
  Cyc知识库是由许多“microtheories” (Mt)构成的,概念集合和事实集合一般与特定的Mt关联。与整体的知识库有所不同的是,每一个Mt相互之间并不矛盾,每一个Mt具有一个常量名,Mt常量约定以字符串 "Mt"结尾。例如:#$MathMt 表示包含数学知识的Mt,Mt之间可以相互继承得到并组织成一个层次化的结构。例如#$MathMt 特化到更为精细的层次便包含了如 #$GeometryGMt,即有关几何的Mt。

1.2推理引擎

 推理引擎是从知识库中经过推理获取答案的计算机程序。Cyc推理引擎支持一般的逻辑演绎推理,包括: 
  肯定前件假言推理(Modus ponens) 
  否定后件假言推理(Modus tollens) 
  全称量化(universal quantification) 
  存在量化(existential quantification)


2、机器学习的四大类别

回归、分类、聚类、降维。

其中最容易理解的就是:降维。当数据的维数太高时,处理起来难免增加难度,所以需要降维。基础算法:PCA。

下面重点来讲前三种,以及其之间的区分。

2.1回归-regression与分类-classification

回归属于有监督学习之一,所谓有监督学习是指预测之前我们已经知道了它的类别(或者称为标签)。产生的结果是连续,这一点是与分类唯一的区别。如:输入一个人的相关数据,包括工作、行业、公司、当前收入等信息,判断10年后该人的经济能力处于什么等级。在这个例子中,等级就是预测之前的类别,而10年是一个连续的。

分类同样也属于监督学习之一,当产生的结果是离散的时候就是分类了。如:输入一个人的相关数据,包括身高、体重、发型等一些信息,判断该人是男生还是女生。在这个例子中,类别(标签)已经在预测之前不确定了——男生和女生,得到的结果只能是:是和否,属于离散的。

两者所使用的算法因此也很接近。如:

分类:SVM(支持向量机)、SGD(随机梯度下降算法)、Bayes(贝叶斯估计)、Ensemble、KNN等。

回归:SVR、SGD、Ensemble、以及其它线性回归算法。

2.2聚类-clustering

聚类不同于上面两种,它属于无监督学习。所谓无监督学习是指预测之前我们并不知道它的类别(或者称为标签)。”物以类聚,人以群分“。同样来理解聚类, 其结果就是将集合中的对象分出类别来,同类别中的对象彼此相似,不同类别中的对象彼此相异。我们也不知道会有多少类别的人或物,所以聚类开始之前,我们也不知道会有多少类别(标签)。

常用算法:K-means(K-均值)、GMM(高斯混合模型)等。


3、感知机

感知机是机器学习的基本理论,用来进行分类,其输出值可以表示为:是1还是0;通过还是不通过。就是简单的二分法。以逻辑运算为例:

3.1和(AND)

A B A&B
0 0 0
0 1 0
1 0 0
1 1 1

对于上面的和(AND)运算,感知机可以表示为:

w1 * A + w2 * B - t = y

三元运算:y = (w1 * A + w2 * B) > t ? 1 : 0

其中t表示域值(或者说成偏置),A和B表示输入,w1和w2表示输入对应的权重。对于上面的和(AND)运算,其参数可以为:w1 = 0.5;w2 = 0.5; t = 0.7;

或(OR)运算

直接跳过分析而给出参数:w1 = 0.6; w2 = 0.6; t = 0.5; 

3.2异或(XOR)运算

A B A ^ B (A xor B)
0 0 0
0 1 1
1 0 1
1 1 0

通过上面的表格,在二维坐标面内绘制各点:

猛然发现,一条直线无法进行区别,即异或门为非线性问题,其解决方案:引入多层感知机。

那么上面异或运算怎么引入多层感知机?其感知机又是什么样子?

经过上图的中间过程的计算,其二进制表变成了什么样子呢?

A B A|B -A&B与后取非 A^B   A(xor)B
0 0 0 1 0
0 1 1 1 1
1 0 1 1 1
1 1 1 0 0

问题完美解决。因为或和与非运算都可以用感知机表示,那么异或感知机的两个输入可以表示为或和与非运算感知机的输出。

至此可以画一个“神经元”了,以表示感知机,这也是机器学习中搭建网络核心最小单元。


4、激活函数——必须为非线性函数

激活函数是什么?个人的理解就是一个判断输出语句。当前的输入,经激活函数计算,它应该输出什么值,即神经元输入与输出的桥梁。

常用的几个激活函数:

  • 阶跃函数:一旦输入超过阈值,输出值进行切换。h(x) = 0,(x<=0); 1,(x>0).   当x<=0时,h(x) = 0; 当x>0时,h(x) = 1;
  • sigmoid函数:其公式为:\frac{1}{1+\frac{x}{e}}     其图像如下图:

其Python代码如下:

#coding:utf8
#simgod曲线
import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(-10,10,1000) 
y=[1/(1+np.exp(-i)) for i in x]  
plt.plot(x,y)  #用上述生成的1000个xy值对生成1000个点
plt.show()  #绘制图像
  • Relu函数:h(x) = x,(x>0); 0,(x<=0). 当x>0时,h(x) = x; 当x <=0时,h(x) = 0; 

4.1最后一层神经元的激活函数选择

最后一层的激活函数选择与问题的类型有关,回归问题,选择恒等函数;分类问题,选择softmax函数。

softmax函数公式为:

其有两个特征:每一个输出值都在0~1之间,表示该输出值的概率;所以输出值加起来总和等于1。

在神经网络中,最后一层的激活函数与输入和输出的关系可以表示为下图:

其中a1~a4均为前面网络计算出来的结果(个数为4只是为了举例),最终输入为y1~y4。然后在这四个值中肯定有个值最大的,按照概率的思想,那么结果就是它。一个问题解决(给出答案),至于好坏还需要进行调整,调整的形式或者说是对象主要是:神经网络拓扑,其每个神经元上的权重和偏置。


5、MNIST数据集

该数据集是手写体数字,如下图:需要做的就是训练(学习)构建模型,然后输入一张手写体图片,模型输出识别的值。可以说是入门习题。

前向传播:使用学习到的参数,对输入数据进行推理。

每个图片有28*28=784个像素点,采用批处理思想,以及借助矩阵乘法,100张图片可以表示为:

[100*784] x [784*50] x [50*100] x [100*10]       其中[]中表示的是矩阵的行列数。100张图片,一张图片有784个像素(表示为一行,或者说将28*28的二维数组转为一维数组存储),中间的数字值为构造的神经网络拓扑中的网络神经元个数。最后的10是必须的,因为只有0~9的数字,共10个。

泛化能力:能正确识别测试集数据。

过拟合:只能正确识别训练集数据。

学习训练中判断好坏的核心:损失函数,值越大性能越差。描述神经网络的性能优劣。不能使用精确度做为判断指标。精确度指判断成功的用例数除以所有输入的用例数。不能使用的原因:太过粗糙,修改网络中的权重和偏置可能导致精确度没有变化。

损失函数一般采用:均方误差和交叉熵误差。其公式分别如下:

公式中y为实验输出值,t为真实值。

为了使损失函数值越来越小,那么当调整参数时,是应该增大还是减少呢?此时借助了高数中的导数和梯度的概念。

导数值为负,权重参数向正方向改变,减小损失函数的值;

导数值为正,权重参数向负方向改变,减小损失函数的值;

说到梯度,谈及多维参数,又引入了偏导数的使用场景。其中有一个学习域的概念,控制调整损失函数的快慢。


6、误差反向传播——计算图(局部计算)

输出误差(某种形式)->隐层(逐层)->输入层 其主要目的是通过将输出误差反传,将误差分摊给各层所有单元,从而获得各层单元的误差信号,进而修正各单元的权值(其过程,是一个权值调整的过程)

神经网络的计算是由一个前向传播以及一个反向传播构成的。先通过前向传播计算出预测结果以及损失;然后再通过反向传播计算出损失函数关于每一个参数(w、b)的偏导数,并对这些参数进行梯度下降,然后用新的参数进行新一轮的前向传播计算,这样来回不停地进行前向传播反向传播计算来训练(更新)参数使损失函数越来越小使预测越来越精准。

所以,可以说误差反向传播的计算很有必要。反向求导的过程其实是在证明参数对最终结果的影响因子。

当时,举了这么一个例子:单价为100元的物品,一次性买了2个,然后需要按1.1的比例纳税,那么这次购物需要花多少钱?显然,通过前向传播可以计算出来。然后,反过来看物品单价、个数、税比的影响系数。

假设,花的钱从220变成了440,增加了220。(注意:一定要关注的是增加的量),纳税前的200应该变成400,这样才可以通过400*1.1=440;所以这个过程下来,纳税前后的增加量为:400-200=200。然后增量之前的比值就是影响系数了。220/200 = 1.1。说这么多,其实很简单,就是求导数的过程。200*1.1=220,用公式表示可以写成 y = ax.    然后y对x求导数结果为系数a。借助高等数学中的“链式法则”,可以求出物品单价的反向影响系数为2.2,因为本身的局部为2,然后乘上上一步的1.1,结果为2.2。

我们可以做一个简单验证:假设物品的单价由100降价到96,然后根据误差反向传播的计算结果:(100-96)*2.2 = 8.8,即最终的花费应该减少8.8元,最终为220-8.8=211.2元。通过正向来计算一遍:96*2*1.1=211.2

至此,计算图整理完毕。对于链式法则,可以回忆下高等数学。


7、过拟合问题解决

主要有三种途径:

扩大训练数据集;

权值衰减  1/2*tw^2   ;

dropout :随机不使用一些神经元。


8、卷积神经网络CNN

卷积神经网络分为:卷积层和池化层。分层提取特征。

卷积运算,其实可以理解为通信上的滤波器对应的权值。直接写一个卷积运算的过程例子就好了。

    下面来解释下这个计算过程。我们把卷积运算当成滤波器来理解,把过滤的“按”上去对齐,顺序为红色框——绿色框——蓝色框——橙色框.。以红色框为例说明计算过程:2*1+0*2+1*3+0*0+1*1+2*2+1*3+0*0+2*1 = 2+3+1+4+3+2=15.

8.1填充、步幅、池化层

所谓填充,就是外围补零,然后再进行卷积计算。下图中阴影部分就是填充部分,其值为零。

所谓步幅,就是“滤波器”一次移动的距离,上面的例子步幅为1.

所谓池化层,可以理解为是填充的反向操作,用来提取特殊,简化计算复杂度。缩小高、宽方向上的空间进行运算。

其方法有两种:平均值法和最大值法。通常是将2*2的区域集约成1个元素。按最大值法,上面的例子可以池化为:

猜你喜欢

转载自blog.csdn.net/bendan50/article/details/82024813