线性回归:
太熟悉了,没什么需要记录的内容。
Softmax回归:
交叉熵
分类问题中常用的损失函数,对比起平方损失函数,交叉熵只关心正确类别的概率(当一个样本只有一个标签时,公示中只有某个的值为1,其余为0, 因此损失函数可以进行简化)
softmax函数
- 输出问题
直接使用输出层的输出有两个问题:- 一方面,由于输出层的输出值的范围不确定,我们难以直观上判断这些值的意义。例如,刚才举的例子中的输出值10表示“很置信”图像类别为猫,因为该输出值是其他两类的输出值的100倍。但如果,那么输出值10却又表示图像类别为猫的概率很低。
- 另一方面,由于真实标签是离散值,这些离散值与不确定范围的输出值之间的误差难以衡量。
softmax运算符(softmax operator)解决了以上两个问题。它通过下式将输出值变换成值为正且和为1的概率分布:
其中
容易看出且,因此是一个合法的概率分布。这时候,如果,不管和的值是多少,我们都知道图像类别为猫的概率是80%。此外,我们注意到
因此softmax运算不改变预测类别输出。
课后习题做完后,发现softmax函数具有平移不变的特点
是否可以在softmax前对输入进行减均值的处理,从而减少softmax的运算量
吐槽开始:
以为课程真的从小白开始,结果上来就是pytorch, 机器学习向来”动口不动手“(惭愧)的我,一下子就蒙蔽了,里面很多对象用法以及函数都是完全蒙圈,咋办?自己从零开始。。。
基本概念
tensor
张量,跟numpy中的ndarray 多维数组很像,但不一样的在于tensor能被gpu加速,待加深理解
动态计算图
动态计算图(Dynamic Computation Graph)是PyTorch的最主要的特性
它可以让我们的计算模型更灵活、复杂
它可以让反向传播算法随时进行
ps: 不明觉厉
动态计算图就是一种算法模型。让我们很清晰的构建自己的算法,如上图,椭圆表示pytorch中一系列的计算过程,而方块表示变量,箭头表示依赖关系
自动微分
在训练一个神经网络的时候,梯度的计算是一个关键的步骤,它为神经网络的优化提供了关键的数据。但是在面临复杂神经网络的时候,导数的计算就会成为一个难题,要求人们解出复杂的、高维的方程式不现实的。这就是自动微分出现的原因,当前最流行的深度学习框架如PyTorch、Tensorflow等都提供了自动微分的支持,让人们只需要少量的工作就能自动计算出复杂函数的梯度
autograd
Tensor是PyTorch实现多维数组计算和自动微分的关键数据结构,一方面,它类似于numpy的ndarray,用户可以对Tensor进行各种数学计算;另一方面,当设置.requires_grad=True之后,在其上进行的各种操作就会被记录下来,用于后续的梯度计算,其内部实现的机制被称为动态计算图.
Variable变量:在pyTorch早期版本中,Tensor只负责多维数组的计算,自动微分的功能是由Variable来完成的。在现在的版本中,二者合二为一了
autograd机制能够记录作用于Tensor上的所有操作,生成一个动态计算图,图的叶子节点是输入的数据,根节点是输出的结果。当在根节点上调用.backward()的时候,就会从根到叶应用链式法则计算梯度。默认情况下,只有.require_grad和is_leaf两个属性都为True的节点才会被计算导数,并存储到grad中。
requires_grad属性
requires_grad属性默认为False,也就是Tensor变量默认是不需要求导的。如果一个节点的requires_grad是True,那么所有依赖它的节点requires_grad也会是True.换而言之,如果一个节点依赖的所有节点都不需要求导,那么它的requires_grad也会是FAlse。在反向传播的过程中,该节点所在的子图会被排除在外。
————————————————
版权声明:本文为CSDN博主「ronaldo_hu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ronaldo_hu/article/details/91359018
好吧。。。要补的内容还挺多的,线性回归倒是没什么特别值得记录的地方
来源:CSDN
作者:qq_41760902
链接:https://blog.csdn.net/qq_41760902/article/details/104288841