网易云课程:深度学习与PyTorch入门实战
01 深度学习初见
1.1 深度学习框架简介
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MAdBgtvY-1627353571007)(5EB9766392EB434A9C110DCA000E54D9)]
Nn.linear 是全连接层
relu是relu层
Conv2d是卷积操作
Softmax激活函数
Sigmoid激活函数
CrossEntropyLoss交叉熵的损失激活函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WyASig9a-1627353571009)(AF7EFC6E2C9343B7BB74C62AC636D57D)]
梯度下降算法就是,求导的迭代过程,每次我们求出一个导数,我们就在当前的x上面的值,减去导数的值,得到一个新的$ x' $的值,这样就完成了一次求导迭代的过程,也就是一次梯度下降的过程。我们最终要求得的就是使得lossfunction最小的$ x^* $
1.2 pytorch功能演示


学术;pytorch
工业界:TensorFlow2

pytorch:
自然语言处理:nlp包
计算机视觉:torchVision包
图卷积:pytorch geometric / fast.ai
pytorch训练好的模型,可以用ONNX协议,轻松部署


第一次在cuda上运行的时候,要完成一些环境的初始化,所以时间会边长,而在此运行时,反映的就是比较准确地时间了,加速了50倍左右。




2开发环境安装


3回归问题
3.1简单的回归问题(梯度下降算法)



closed form solution
可以精确求解的问题,称之为closed form solution
闭环问题? 用高斯消元法
然后在现实生活中,我们拿到的数据往往都是带有一定的噪声的,或者说带有一定的观测误差,人会有自己的主观意志在里面,这使得我们拿到的数据样本会不太一样。就比如说我们在原本的wx+b上面,加上一个随机的高斯噪声,这个高斯噪声是采样自均值为0.01,方差为1的高斯分布。distribution(分布),这个噪声相对而言是比较小的,但是因为它的存在,使得我们拿到的这个数据样本,相对而言是准确的。这里下面的几个绿色的公式,我们拿到了两个方程,我们同样是可以求解的。因为我们引入了误差,我们希望多观测几次这个数据,来求得一个平均的稍微好一点的解,这样子的话,与其观测两个数据点,得到的误差可能会稍微有一点大,我们通过观测一组数据,通过观测者一组数据,来求得这一组数据之上的,整体表现好的这样的一个解,这样的一个解,虽然可能不是closed form solution,但是它被我们经验证明了可以有良好的表现。已经可以达到我们的需求了,因此对于实际的问题我们往往都不会,像初中时候那样,只给出两个观测样本,就比如说方程1和方程2,我们就可以求解了。这往往是不准确的,我们往往会拿到这样的100组或者是1000组这样的方程组,然后通过求解这1000或者100个方程组,整体表现好的一组参数量,来把它作为我们一组方程的解。我们把它写成矩阵形式就是这样子,(WX+b - y)^2,然后我们希望求解的是什么呢?我们为什么要把它写成这个样子呢?大家想想我们刚才讲过的那个例子,我们使用梯度下降算法是求什么?是求这个函数的最小值,但是对于Y = WX+b这个方程来说,我们是要求y的最小值吗?不是,我们是要求y与wx+b这两个差最小,因为我们希望,我们求解的这个w和b的参数使得wx+b这个值更加接近于我们真实的y的值,因此我们并不是要求y的极小值,而是希望求y和wx+b,之间的和最小。我们通过这个方法来衡量他们之间的差距。比如说我们希望求y和wx+b之间差的平方和最小,通过求他们两个之间的平方和最小,我们令这个新的函数称为loss函数,这个loss函数的值最小,我们就达到了使得y和wx+b非常接近的目的,为什么是这个样子的呢?

首先我们来看一下,这个loss 函数是不是大于等于0的,当这个loss function等于0的时候,也就是y等于wx+b的时候。因此我们求y = wx+b的最小值也就是求 y =wx+b,或者说y 近似于wx+b,这样也就得到了你想要的那样一个参数w和参数b,我们用非常真实的模型,来生成一系列的数据,那我们怎么生成呢?
比如说x我们从0-15之间,随便sample出来值,它对应的y的值也会sample出来,就等于上面的公式,我们通过这个具体的模型,sample出来一系列的值,比如说这里面有100个点,我们现在是拿到了一个有高斯噪声的100个数据的采样样本,我们知道这100个高斯噪声,也知道这个函数是怎么生成的,但是我们假设不知道,为什么呢?
因为在实际当中,我们是不知道这个模型是什么样子的。我们通过观察并且给出一定的假设,我们假设这个函数是符合线性分布的。就比如说它是如图的直线,我们就是要求出具体的w和b的参数,使得这条直线跟整体的这个误差比较小,我们怎么衡量这个误差呢?
就是用均方差,就是用我们求得的wx+b+艾普斯冷的值和真实的y值之间的平方和差最小,我们把这个标准作为我们要优化的目标,也就是说我们要求这个函数的极小值,我们把下面那个函数稍微的正式化一下。


对于一个具体的方程,我们要求解的参数是w和b,然后我们观测到的样本是x和y,xi表示我们第i个观测到的样本,我们通过借助于梯度下降的方法,梯度下降可以帮助我们求解一个极小值。我们这里是希望wx+b逼近于y,因此我们构建一个[y-(wx+b)]这样一个新的函数,来求这个新的函数的极小值,也就达到了我们x趋近于b这样一个目的,我们给这个新的函数取名为loss函数,在Loss函数取得极小值的时候,w和b的值,也就是我们要求解的值,我们通过最小化这个Loss function,使得我们求解了一个比较合适的解,合适解我们叫做w’(w派)和 b派(b’),这样,对于一个新的观测样本,w’x’+b’与y’之间的符合度是非常非常高的,因为我们就是这么求解的,即使不知道y·,我们也能够给出一个y’(y派)的估计。

上面谈到的那个方程是非常容易求解的,现在我们来可视化的看一下,整个求解的过程,我们通过调整不同的w和b,会生成不同的loss值,如图示w轴和b变化的轴,我们是希望求解Loss最小的这个点,最小的这个点大概在什么位置?如图蓝色的点是比较低的点,红色的点是比较高的点,我们通过对这个图片的感测,大概可以目测出最低点的位置。所以说,如果Lossfunction能够可视化的话,我们就可以非常直观的来观察出loss function最低点的w和b的值,但是现实生活中往往都不能够可视化,因为我们的x的维度是非常非常高的,导致我们这个w的维度也非常非常高,因此我们很难在三维的空间中把函数loss function的图像画出来,大家可以看一下这个曲面是比较光滑的,是有一个固定的下降区间,你从任何一个点走走走,总会走到这样一个大概的范围里面,因为他有一个全局极小解,而且这个函数就像一个碗一样,你从这个碗里的任何一个地方滴一滴水的话,这个水滴总会顺着这个碗壁,流流流,流到碗底。这样的函数叫做凸函数。
对于凸函数,它有一个专门的学科来讲解如何优化凸函数,就叫做凸优化。对理论感兴趣的话可以稍微去关注一下这些书籍。但是我们做deeplearnning算法,一般来说,对这方面的深入了解会少一些,我们就直接用现成的这些优化器就可以了。这个函数,即使是非凸函数,我们也能够找到一个局部最小值,这个局部最小值根据经验往往来说,已经发现效果比较好了,因此我们即使是一个局部极小值,我们也可以先用着。



现在我们来动态的来看一下,w和b的动态求解过程,右边的这幅图就是说,我们从一个随机的初始点,比如说我们把w和b都随机地初始化为0,然后我们在每一处对w和b来求导,来更新这个w的值,大家可以看一下,这条红色的线,也就是y=wx + b 对应的一次函数不断向左逆时针走,看左边的图,我们会发现,我们更新100次之后,w和b的值,已经比较接近于我们的理论值了,这两幅图也比较直观地描述了整个学习的过程,这也是我们希望看到的,我们希望看到的就是,一条这样的直线穿过整个数据集,是的整体误差偏小。
现在我们来看一下,我们刚刚求解的问题,我们刚刚求解的问题是什么? 我们要预测wx+b的一个值公式中各个参数的值,我们现在已经拿到了一些样本,我们通过观察这一系列的样本,来推测一个w和b的参数,使得我们对于任何一个给出的xn的值我们能够很好地预估yn,这就是我们最终的目的,我们这里的y的取值范围,大概是属于一个整体的实数空间,比如说是-无穷到+无穷,我们把这种案例,也就是y的取值范围是实数空间的这种案例,叫做linnie regresion线性回归。别看它的名字这么复杂,它其实非常非常简单,它就是说他要预测的一个值是连续的值,那什么是连续的值? 就比如说我们要预测某一个数值的大小,它是连续的吧,我们要估计,年龄的大小,0-100,虽然说,他并不是在整个的实数空间,但是他在0-100的空间,我们也可以理解为y的值是连续的,因此它也是regression,然后,我们可以预测某一个指数,就比如说恒生指数啊,股票的指数呀,某一方面的指数呀,这些都是regression的问题,然后与regression相对的一个叫logistic regression,逻辑回归是什么意思呢? 就是在原本的linear regression的基础上加了一个回归函数,也就是加了一个压缩函数,它会将y从负无穷到正无穷的一个去见范围压缩到0-1的这样一个范围,因此逻辑回归会把原来的一个实数的连续取值空间压缩到0-1的范围,那0-1有什么好处?首先0-1表示一个概率的问题,比如二分类的硬币正反面问题,我们需要的不是实数域的取值范围,而是一个0-1的取值范围,用0表示正面,用1表示反面。因此我们就可以用,logistic regression
来解决这个二分类问题。 再比如说0-9的一个手写数字识别问题,这种问题有什么特点呢? 就比如说我有十个点,每个点代表了当前这个lable的概率大小,因此它有一个这样的特点,就是说这十个点的概率加起来会等于一,对于这种问题,它的每一个点的范围是0-1,但是他还有另外一个属性,就是所有的点的概率加起来等于1,这就是分类问题和逻辑回归问题的一个小区别,逻辑回归问题对应的某个点的概率是0-1,他没有说所有的点的概率加起来要是0-1,它是单独的处理就可以了。而线性回归最简单,它是默认所有的取值点都是连续的,你可能不是属于负无穷或者正无穷,但是你是一个比较大的连续空间。
3.3回归问题实战
给位同学,我们上节课讲解了梯度下降算法,我们通过分析一个简单的二元一次方程组,讲解了我们初中时代,使用消元法的clossed fond解法,然后我们通过添加了一个高斯噪声,来模拟现实生活中遇到的一些问题,添加了噪声以后,如果只观测1-2个数据,这样子得出的模型,往往具有非常大的随机性,我们通过sample一些类的数据,来求解一个线性模型,使得这个线性模型,在这一系列数据上总的误差和最小,得到的模型往往具有非常好的鲁棒性。
鲁棒是Robust的音译,也就是健壮和强壮的意思。它是在异常和危险情况下系统生存的关键。比如说,计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃,就是该软件的鲁棒性。所谓“鲁棒性”,是指控制系统在一定(结构,大小)的参数摄动下,维持其它某些性能的特性。
模型能够透过噪声发现数据的真实的形态。

对于这种预测值属于连续实数空间的问题,
我们给它取个名字,称之为称之为线性回归 Linear Regression。
对于预测值在0-1之间的连续空间的问题,我们换了一个名字,称之为logistics regression,它就是在一般的线性回归模型的基础上加了一个额外的logistics function,这也就是我们常讲的sigmoid function,它的作用就是把x属于负无穷到正无穷之间的范围,压缩到0-1之间,这种压缩特表适合表达概率问题。比如说二分类的硬币,正面还是反面的一个概率问题,以及多分类问题的手写数字识别,我们除了知道它的数字范围在0-1之间外,它还有一个额外的约束,就是要求所有的输出节点之间的总的数据概率之和为1。这个就更加符合一个多分类问题。然后我们取概率最大的一个点作为预测值。




OK,至此,我们已经讲解了如何使用numpy,通过梯度下降的算法来求解一个简单的二元一次方程组,下一节课,我们将使用真正的梯度下降算法去求解一个现实的问题,因为对于这样一种简单的二元一次方程组,可能大家看起来非常的学术化,仅限于一些看起来像是比较简单的例子,下一节可,我们将使用梯度下降算法来求解一个非常具有现实意义的问题。比如说邮政编码的识别,比如说数字车牌的识别。
3.4 分类问题引入


例如数字0,它含有7000张照片,涵盖各种风格样式,可以每个数字用6000来训练,1000来测试。所以就是60K训练,10K来测试。
这样划分的目的是,防止过拟合,过于理想的结果。


现在我们来看一下,怎么计算loss? 要计算Loss,首先要知道我们这个h3,如果作为最后一个输出的话,那么 它怎么表达我们想要表达的lable信息呢?首先我们想到的第一种方法是,对于数字0-9,我们用一个维度,9个数字来表达,因此我们这里h3的输出就可以表示成H3:[1,1],第一个1表示的是照片数量,第二个1表示的就是0-9的一个数字,对于图片来说,lable是1或者lable是3,他们之间是没有相关性的。我们可以对数字进行one-hot编码,这种编码方式就没有大小关系。
如上图,假设我们有一个十维的点,她的真实的lable,建设如图右边[0 1 0 0 0], 根据二维的欧式距离的一个算法,我们这里十维的点也可以直接相减。然后再求一个平方和,这就是欧氏距离的算法。欧氏距离适合于2维、三维、…十维等等这样的向量之间的差距。

我们pred值不采用0-9的数字来表示,因为我们刚刚讲了,我们采用一个10维的向量来表示。
现在还有一个很小的问题就是,因为我们这里的每一个模型都是线性的,即使通过嵌套,增强了她的表达能力,但是他总体的模型还是线性模型,对于一个手写数字来说,比如说1,我们人之所以能够把它识别成1,是因为人脑有很强的表达非线性的能力。对于一个线性模型来说,它是很难完成手写数字体识别这种显示世界中的简单问题的。那怎么解决这个问题呢,我们在这里引入一个新的东西。我们在每一个函数之后,添加一个非线性的部分,这个非线性的部分它是怎么来的呢?

这个非线性的部分是源自于生物学当中的神经元。对

本课程介绍深度学习基础概念,包括PyTorch使用、梯度下降算法、线性回归、分类问题及神经网络等。通过理论与实践结合的方式,帮助学员掌握深度学习核心技术。
最低0.47元/天 解锁文章
847





