Deep Learning
概率论
极大似然估计
概率是通过已知的条件,推测事件发生的可能性;似然则相反,是基于已经确定的结果反推产生这个结果的可能性。
极大(最大)似然估计:通过已知结果推测最大概率导致这些样本结果出现的模型参数。
2.4 Calculus
梯度
我们可以连结一个多元函数对其所有变量的偏导数,以得到该函数的梯度(gradient)向量。 具体而言,设函数
其中$ \nabla_{\mathbf{x}} f(\mathbf{x})
假设
- 对于所有
,都有 - 对于所有
,都有 - 对于所有
,都有
同样,对于任何矩阵
关于梯度向量是行向量还是列向量?
都不是,行向量和列向量是从矩阵的角度来描述向量时才特有的,普通向量并没有必须放到矩阵中去,也没有所谓必须是行向量或者列向量的说法
练习
绘制函数
和其在 处切线的图像。
import numpy as np
import matplotlib.pyplot as plt
def func(x):
return x ** 3 - 1 / x
def numerical_lim(f,x):
h = 1e-4
return (f(x+h)-f(x))/h
def tangent_line(f, x):
## d就是调用numerical_diff求得在x点点导数
d = numerical_lim(f, x)
## 这里直接y=kx+b求截,简单粗暴,y就是截距
y = f(x) - d * x
## 使用lambda匿名函数,t是形参,':'后是要执行的函数表达式
return lambda t: d * t + y
x = np.arange(0.1, 5, 0.1)
y = func(x)
plt.xlabel('x')
plt.ylabel('y')
## 把函数作为形参时i,传入实参函数时,只要函数名即可,不用()
tf = tangent_line(func,1)
## 因为tf返回的是lambda函数,所以要多调一次函数
y2 = tf(x)
plt.plot(x, y)
plt.plot(x, y2, linestyle='--')
plt.show()求函数
的梯度。
函数
的梯度是什么?
尝试写出函数
,其中 , , 的链式法则。
2.5 Automatic Differentiation
在PyTorch中,.requires_grad_(True) 是一个用于设置张量(tensor)属性的方法,用于指示计算时是否需要计算梯度(gradient)。具体来说:
x.requires_grad_(True)表示将张量x的requires_grad属性设置为True,这意味着当对x进行操作时,PyTorch会自动跟踪对x的计算,并且在计算过程中保留梯度信息,以便后续进行反向传播计算梯度。
通常情况下,我们会将需要参与模型训练的参数设置为 requires_grad=True,以便在优化过程中自动计算参数的梯度,从而更新参数。
举例说明:
import torch
## 创建一个张量
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=False)
## 设置 requires_grad=True,即需要计算梯度
x.requires_grad_(True)
## 进行一些计算
y = x.pow(2).sum()
## 反向传播,计算梯度
y.backward()
## 输出梯度
print(x.grad) ## 这里将会输出对应的梯度值在这个例子中,我们将 x 的 requires_grad 属性设置为 True,然后进行了一些计算(计算了 x 的平方和 y),然后通过 y.backward() 反向传播计算了 y 对 x 的梯度。 
2.7 Documentation
为了知道模块中可以调用哪些函数和类:
- 查找模块的所有属性
dir(torch.distributions)通常可以忽略以“__”(双下划线)开始和结束的函数,它们是Python中的特殊对象, 或以单个“_”(单下划线)开始的函数,它们通常是内部函数。 根据剩余的函数名或属性名,我们可能会猜测这个模块提供了各种生成随机数的方法, 包括从均匀分布(uniform)、正态分布(normal)和多项分布(multinomial)中采样。
- 查找特定函数和类的用法
有关如何使用给定函数或类的更具体说明,可以调用help函数。 例如,我们来查看张量ones函数的用法。
help(torch.ones)3. 线性神经网络
3.1 线性回归
给定一个数据集,我们的目标是寻找模型的权重

3.4 softmax回归
softmax回归是一个多类分类问题

计算过程


所有输出o,都转化为y,且

- 独热编码
顾名思义,全连接层是“完全”连接的,可能有很多可学习的参数。 具体来说,对于任何具有𝑑个输入和𝑞个输出的全连接层, 参数开销为𝑂(𝑑𝑞),这个数字在实践中可能高得令人望而却步。 幸运的是,将𝑑个输入转换为𝑞个输出的成本可以减少到𝑂(𝑑𝑞/𝑛), 其中超参数𝑛可以由我们灵活指定,以在实际应用中平衡参数节约和模型有效性 (Zhang et al., 2021)。