深度学习概述+Colab配置+pytorch初次使用

深度学习概述+Colab配置+pytorch初次使用

 

1.视频学习基本知识点总结

 

机器学习使用情况:问题规模大->准则复杂度大->数据集->有意义的模式->没有解析解

机器学习:模型、策略、算法

 

机器学习模型:

模型分类:(数据标记)

监督学习:输出空间已知

无监督学习:数据标记未知,目的在于发现数据中有意义信息

半监督学习:部分数据标记已知

强化学习:数据标记未知,但知道与输出目标相关的反馈(决策类问题)

 

模型分类:(数据分布)

参数模型:对数据分布进行假设,用有固定数目的参数进行解决

非参数模型:不对数据分布进行假设。

 

模型分类:(建模对象)

生成模型:对输出的联合分布P(X,Y)建模

判别模型:对条件分布P(Y|X)建模

 

人工智能>机器学习>深度学习

 

深度学习存在问题:

算法输出不稳定,容易被攻击

模型复杂度高,难以纠错和调试

模型层级符合程度高,参数不透明

端到端训练方式对数据依赖性强,模型增量性差(样本量小时,无法体现强大的拟合能力

对开放性推理问题无能为力(比如:鹦鹉、乌鸦)

人类知识无法有效引入进行监督,机器偏见难以避免(数据并非中立)

 

 

连接主义:自下而上(模拟人)+符号主义:自上而下 ???

 

神经网络

多输入但输出、空间整合/时间整合、兴奋性/抑制性输入、阈值特性

激活函数

 

万有逼近定理:

如果一个隐层有足够多的神经元,三层前馈神经网络能以任意禁锢逼近任意预定的连续函数

当隐层足够宽时,双隐层感知器可以逼近任意非连续函数:可以解决任何复杂分类问题。

 

神经网络学习如何利用矩阵的线性变换加激活函数的非线性变换,将原始输入空间投影到线性可分的空间去分类/回归。

增加节点数:增加维度(增加线性转换能力)

增加层数:增加激活函数次数(增加非线性转换次数)

 

在结点数目一定的条件下,瘦高网络更好一些(深度)(并非越深越好)

 

多层神经网络可以看成一个复合的非线性多元函数

 

梯度:多元函数f(x,y)在每个点可以有多个方向,每个方向都可以求导,其中导数最大的方向

因此梯度是一个向量

无约束优化方法:梯度下降(沿负梯度方向更新可使函数值下降)

残差:损失函数在某个结点的偏导(反馈过程)

梯度消失:误差反向传播(增加深度会造成梯度消失,误差无法传播)

 

 

自编码器

假设输入输出相同没有额外监督信息将自己输入当成输出

一般是多层神经网络先编码再解码

训练目标使输出层和输入层误差最小

中间隐层代表输入特征可以最大程度代表原输入信号

 

受限玻尔兹曼机RBM

特点

只包含两层神经网络可见层v输入层和隐藏层h

不同层全连接二分图

目的

让隐藏层得到的可见层v’与原来的可见层v分布一致从而使隐藏层作为可见层输入的特征

两个方向权重w共享偏执不同

模型参数wcb

 

假设可见层和隐藏层结点都是01),两个方向的概率就是sigmoid

 

 

DBN深度信念网络):由若干RBM堆叠最后加一个监督层

训练由低到高逐层训练

 

 

pytorch学习

1.基本定义方法及部分解释

torch.tensor(  )

参数可以是一个数、向量、矩阵、张量

torch.ones( x,y):张量全为1(同时有torch.float32( ),torch.int64( )等多种定义类型

torch.empty(x,y )、torch.rand(x,y)、torch.zeros( )

x.new_ones(x,y):继承原有x的dtype和device

torch.randn_like(x,dtype= )保持原有大小,重新定义dtype

torch.arange(1,5,step):[1,2,3,4]

2.基本数学运算

  基本:

  abs/sqrt/div/exp/fmod/pow/cos/sin/asin/atan2/cosh/ceil(向上舍入)/round(四舍五入)/floor/trunc(截断)

  布尔:

  gt/lt/ge/le/eq/ne/topk/sort/max/min

  线性:

  Trace(对角线元素之和)/diag(对角线元素)/mm/bmm(矩阵乘法)/dot(内积)/cross(外积)/invese/svd

  其它及表示方法:

  numel( ):返回数量

  m[:,x]:表示第x列所有元素

  m@v:求点积

  m.t( )/m.transpose( ):求转置

  torch.linspase(start,end,step) :返回一个1维张量,包含在区间start和end上均匀间隔                                                                   的step个点

 

总结:

运算在colab上都能运行通过,但应对许多运算尤其是线性代数方面进行复习。

 

螺旋数据分类学习:

 

1.构建模型

 

 

 

2.构建线性模型分类

训练所用线性模型:

model = nn.Sequential(

    nn.Linear(D, H),

    nn.Linear(H, C)

)

训练结果:

 

 

 

得到训练模型:

 

发现线性模型对分类的准确度较低

 

3.构建两层神经网络:

训练所用模型:

model = nn.Sequential(

    nn.Linear(D, H),

    nn.ReLU(),

    nn.Linear(H, C)

)

训练结果:

 

 

 

训练模型:

 

 

 

 

发现在使用ReLu( )激活函数后准确率明显提高。

 

总结

通过本次螺旋模型的训练,了解了训练一个基本模型的步骤,将在绪论中学到的知识(比如:激活函数、损失函数、梯度下降优化,反向传播等)在实战中加深了理解。

posted @ 2020-10-21 09:44  古来月  阅读(1285)  评论(1编辑  收藏  举报