深度学习概述+Colab配置+pytorch初次使用
深度学习概述+Colab配置+pytorch初次使用
1.视频学习基本知识点总结
机器学习使用情况:问题规模大->准则复杂度大->数据集->有意义的模式->没有解析解
机器学习:模型、策略、算法
机器学习模型:
模型分类:(数据标记)
监督学习:输出空间已知
无监督学习:数据标记未知,目的在于发现数据中有意义信息
半监督学习:部分数据标记已知
强化学习:数据标记未知,但知道与输出目标相关的反馈(决策类问题)
模型分类:(数据分布)
参数模型:对数据分布进行假设,用有固定数目的参数进行解决
非参数模型:不对数据分布进行假设。
模型分类:(建模对象)
生成模型:对输出的联合分布P(X,Y)建模
判别模型:对条件分布P(Y|X)建模
人工智能>机器学习>深度学习
深度学习存在问题:
算法输出不稳定,容易被攻击
模型复杂度高,难以纠错和调试
模型层级符合程度高,参数不透明
端到端训练方式对数据依赖性强,模型增量性差(样本量小时,无法体现强大的拟合能力
对开放性推理问题无能为力(比如:鹦鹉、乌鸦)
人类知识无法有效引入进行监督,机器偏见难以避免(数据并非中立)
连接主义:自下而上(模拟人)+符号主义:自上而下 ???
神经网络
多输入但输出、空间整合/时间整合、兴奋性/抑制性输入、阈值特性
激活函数
万有逼近定理:
如果一个隐层有足够多的神经元,三层前馈神经网络能以任意禁锢逼近任意预定的连续函数
当隐层足够宽时,双隐层感知器可以逼近任意非连续函数:可以解决任何复杂分类问题。
神经网络学习如何利用矩阵的线性变换加激活函数的非线性变换,将原始输入空间投影到线性可分的空间去分类/回归。
增加节点数:增加维度(增加线性转换能力)
增加层数:增加激活函数次数(增加非线性转换次数)
在结点数目一定的条件下,瘦高网络更好一些(深度)(并非越深越好)
多层神经网络可以看成一个复合的非线性多元函数
梯度:多元函数f(x,y)在每个点可以有多个方向,每个方向都可以求导,其中导数最大的方向
因此梯度是一个向量
无约束优化方法:梯度下降(沿负梯度方向更新可使函数值下降)
残差:损失函数在某个结点的偏导(反馈过程)
梯度消失:误差反向传播(增加深度会造成梯度消失,误差无法传播)
自编码器:
假设输入输出相同,没有额外监督信息,将自己输入当成输出
一般是多层神经网络(先编码再解码)
训练目标:使输出层和输入层误差最小
中间隐层代表输入特征,可以最大程度代表原输入信号
受限玻尔兹曼机(RBM)
特点:
只包含两层神经网络:可见层v(输入层)和隐藏层h
不同层全连接(二分图)
目的:
让隐藏层得到的可见层v’与原来的可见层v分布一致,从而使隐藏层作为可见层输入的特征
两个方向权重w共享,偏执不同
模型参数:w,c,b
假设可见层和隐藏层结点都是(0,1),两个方向的概率就是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( )激活函数后准确率明显提高。
总结:
通过本次螺旋模型的训练,了解了训练一个基本模型的步骤,将在绪论中学到的知识(比如:激活函数、损失函数、梯度下降优化,反向传播等)在实战中加深了理解。