文章目录
机器学习基本概念
机器学习的任务包括:回归、分类、结构学习(structure learning)
机器学习步骤
- Model——Function with Unknown Parameters
模型函数的形式依赖于领域知识 - Define Loss from Training Data
Error Surface(等高线图)
loss是自己定义的函数,可以是负的 - Optimization
Gradient Descent(优化方法)
梯度下降停止:自行设置epoch;到达梯度为0的点就停止
Gradient Descent有local minima的问题
线性模型
- 普通线性模型的表示力太弱
- piecewise linear curves=constant+sum of a set of blue piecewise functions(下图中蓝色的函数)
分段线性曲线=常数+一组分段函数
上图中的 blue function为hard sigmoid,可用sigmoid近似hard sigmoid.
loss
优化
以此类推直到你不想做,或者是你算出来的这个 Gradient,是 0 向量 是 Zero Vector,导致你没有办法再更新参数為止,不过在实作上你几乎不太可能,作出 Gradient 是 0 向量的结果,通常你会停下来就是你不想做了.
分batch优化
sigmoid和relu统称激活函数,后者效果较好,也更常用。
deep的意义
引出问题,日后讲解:
反向传播
To use gradient descent effectively, we use back propagation.
chain rule
在反向传播中运用链式法则,可以求出损失函数对每一层参数(w, b)的导数,从而进行梯度下降,更新每个参数。
pytorch了解
- An open source machine learning framework.
- A python package that provides two high-level features:Tensor的计算,tensor这种数据类型类似于numpy的ndarry,但可用于GPU加速运算;具有tape-based autograd system,计算梯度,便于网络的参数更新。
课件链接:https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/hw/Pytorch/Pytorch_Tutorial_1.pdf- pytorch的方法的参数中有,位置参数和关键字参数,前者无需指定参数名,后者需要指定
- 运行代码时常见错误:https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/hw/Pytorch/Pytorch_Tutorial_2.pdf
mismatched tensor type:例子中给的label是一个整数,torch会将其解析成float类型,但是标签不能是浮点数,所以需要将label转化成torch.long类型。
HomeWork1
- gdown 作为一个Python的工具包,可以使用写代码的方式进行下载。https://blog.csdn.net/zhou_438/article/details/116399508
- 代码讲解博客
myseed = 42069 # set a random seed for reproducibility
torch.backends.cudnn.deterministic = True #这段代码保证每次运行网络时,相同的输入具有相同的输出
torch.backends.cudnn.benchmark = False
np.random.seed(myseed)
torch.manual_seed(myseed)
if torch.cuda.is_available():
torch.cuda.manual_seed_all(myseed)
- pred.detach() 使用该函数可以不去计算pred的梯度
模型优化
- 如何判断loss不下降是model弹性不够还是优化没有做好的问题?
- overfitting
training data上面的loss小,testing data上的loss大
关于overfitting的讲解:https://blog.csdn.net/zhaoliguaner/article/details/119742915 - mismatch
mismatch它的原因跟overfitting,其实不一样,一般的overfitting,你可以用搜集更多的资料来克服,但是mismatch意思是说,你今天的训练集跟测试集,它们的分佈是不一样的~这时增加训练集没有用
如何解决:作业11讲解
判断是不是mismatch:那我觉得知不知道是mismatch,那就要看你对这个资料本身的理解了,你可能要对你的训练集跟测试集,的产生方式有一些理解,你才能判断说,它是不是遇到了mismatch的状况。
优化中遇到的问题
loss不下降,gradient=0,及解决思路
- critical points
- batchsize
- 自适应学习率
- batch normalization
分类
Classification with softmax
y i ′ = e x p ( y i ) ∑ j e x p ( y i ) y_i'=\frac{exp(y_i)}{\sum_j exp(y_i)} yi′=∑jexp(yi)exp(yi)
- Soft-max的作用:Normalized,让 y₁’ y₂’ y₃’,变成0到1之间,还有和為1;
它会让大的值跟小的值的差距更大;
Soft-max的输入,往往就叫它logit - 两个class用sigmoid,跟soft-max两个class是等价的
loss of classification——CE
- 交叉熵损失最小时,均方误差损失也会最小~
- 最小化交叉熵损失等价最大化似然估计
- 在pytorch裡面,Cross-entropy跟Soft-max,他们是被绑在一起的,他们是一个Set,你只要Copy Cross-entropy,裡面就自动内建了Soft-max
- Cross-Entropy比MSE更适合做损失函数。损失函数的选取也会影响optimization的难度,CE使得难度变低。
逻辑回归——用于分类
由于分类可看作伯努利分布,最大化分类经过数学推演,等价于最小化交叉熵,从而引出交叉熵损失函数
逻辑回归和线性回归参数更新的形式是一样的,区别在于:对于逻辑回归,target
y
n
y^n
yn 是0或者1,输出是介于0和1之间。而线性回归的target可以是任何实数,输出也可以是任何值。
逻辑回归的boundary界限是一条直线~
为什么逻辑回归不用MSE作损失函数(分类问题不用MSE做损失函数)
在距离目标类别比较远的时候,CE具有较大损失,MSE的损失依旧很小~
判别模型VS生成模型
判别模型:直接用梯度下降法找出w和b;生成式模型自己先脑补了一个分布。
先验和类相关的概率可以从不同的来源估计。
多类别分类
- 指数簇分布的最大熵等价于其指数形式的最大似然界。二项式的最大熵解等价于二项式指数形式(sigmoid)的最大似然,多项式分布的最大熵等价于多项式分布指数形式(softmax)的最大似然,因此为什么用sigmoid函数,那是因为指数簇分布最大熵的特性的必然性。
- 最大熵的角度理解指数分布族:
最大熵原理认为,学习概率模型时,在所有的概率模型中,熵最大的模型是最好的模型。指数族分布满足最大熵原理,在满足约束条件下,如果没有更多的信息,则那些不确定的部分概率相等时熵最大。就是说在满足已知事实(约束)的情况下指数族分布的熵最大。(离散型)