Update 2.2-deep-learning-basic-mathematics.ipynb
This commit is contained in:
parent
d18ddbb218
commit
ce7d56b487
@ -29,7 +29,7 @@
|
||||
"- 半监督学习 :在训练阶段结合了大量未标记的数据和少量标签数据。与使用所有标签数据的模型相比,使用训练集的训练模型在训练时可以更为准确。\n",
|
||||
"- 强化学习:我们设定一个回报函数(reward function),通过这个函数来确认否越来越接近目标,类似我们训练宠物,如果做对了就给他奖励,做错了就给予惩罚,最后来达到我们的训练目的。\n",
|
||||
"\n",
|
||||
"这里我们只着重介绍监督学习,因为我们后面的绝大部们课程都是使用的监督学习的方法,在训练和验证时输入的数据既包含输入x,又包含x对应的输出y,即学习数据已经事先给出了正确答案。"
|
||||
"这里我们只着重介绍监督学习,因为我们后面的绝大部们课程都是使用的监督学习的方法,在训练和验证时输入的数据既包含输入x,又包含x对应的输出y,即学习数据已经事先给出了正确答案。"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -185,7 +185,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"其中参数(1, 1)代表输入输出的特征(feature)数量都是1. `Linear` 模型的表达式是 $y=w \\cdot x+b$, 其中 $w$ 代表权重, $b$ 代表偏置"
|
||||
"其中参数(1, 1)代表输入输出的特征(feature)数量都是1. `Linear` 模型的表达式是 $y=w \\cdot x+b$,其中 $w$ 代表权重, $b$ 代表偏置"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -241,7 +241,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"准备训练数据: `x_train`, `y_train` 的形状是 (256, 1), 代表 `mini-batch` 大小为256, `feature` 为1. `astype('float32')` 是为了下一步可以直接转换为 `torch.float`."
|
||||
"准备训练数据: `x_train`, `y_train` 的形状是 (256, 1), 代表 `mini-batch` 大小为256, `feature` 为1. `astype('float32')` 是为了下一步可以直接转换为 `torch.float`."
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -327,7 +327,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"训练完成了,看一下训练的成果是多少. 用 `model.parameters()` 提取模型参数. $w$, $b$ 是我们所需要训练的模型参数\n",
|
||||
"训练完成了,看一下训练的成果是多少。用 `model.parameters()` 提取模型参数。 $w$, $b$ 是我们所需要训练的模型参数\n",
|
||||
"我们期望的数据 $w=5$,$b=7$ 可以做一下对比"
|
||||
]
|
||||
},
|
||||
@ -386,7 +386,7 @@
|
||||
"source": [
|
||||
"以上就是一个使用PyTorch做线性回归的简单样例了,下面我们会对上面的内容做详细的介绍\n",
|
||||
"## 2.2.3 损失函数(Loss Function)\n",
|
||||
"损失函数(loss function)是用来估量模型的预测值(我们例子中的output)与真实值(例子中的y_train)的不一致程度,它是一个非负实值函数,损失函数越小,模型的鲁棒性就越好。\n",
|
||||
"损失函数(loss function)是用来估量模型的预测值(我们例子中的output)与真实值(例子中的y_train)的不一致程度,它是一个非负实值函数,损失函数越小,模型的鲁棒性就越好。\n",
|
||||
"我们训练模型的过程,就是通过不断的迭代计算,使用梯度下降的优化算法,使得损失函数越来越小。损失函数越小就表示算法达到意义上的最优。\n",
|
||||
"\n",
|
||||
"这里有一个重点:因为PyTorch是使用mini-batch来进行计算的,所以损失函数的计算出来的结果已经对mini-batch取了平均\n",
|
||||
@ -427,7 +427,7 @@
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### nn.CrossEntropyLoss:\n",
|
||||
"多分类用的交叉熵损失函数,LogSoftMax和NLLLoss集成到一个类中,会调用nn.NLLLoss函数,我们可以理解为CrossEntropyLoss()=log_softmax() + NLLLoss()\n",
|
||||
"多分类用的交叉熵损失函数,LogSoftMax和NLLLoss集成到一个类中,会调用nn.NLLLoss函数,我们可以理解为CrossEntropyLoss()=log_softmax() + NLLLoss()\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" $ \\begin{aligned} loss(x, class) &= -\\text{log}\\frac{exp(x[class])}{\\sum_j exp(x[j]))}\\ &= -x[class] + log(\\sum_j exp(x[j])) \\end{aligned} $\n",
|
||||
@ -469,7 +469,7 @@
|
||||
"source": [
|
||||
"### 梯度\n",
|
||||
"在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。\n",
|
||||
"例如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,简称grad f(x,y)或者▽f(x,y)。\n",
|
||||
"例如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,简称grad f(x,y)或者▽f(x,y)。\n",
|
||||
"\n",
|
||||
"几何上讲,梯度就是函数变化增加最快的地方,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向梯度减少最快,也就是更加容易找到函数的最小值。\n",
|
||||
"\n",
|
||||
@ -504,7 +504,7 @@
|
||||
"\n",
|
||||
"普通的batch梯度下降法和Mini-batch梯度下降法代价函数的变化趋势,如下图所示:\n",
|
||||
"\n",
|
||||
"- 如果训练样本的大小比较小时,能够一次性的读取到内存中,那我们就不需要使用Mini-batch,\n",
|
||||
"- 如果训练样本的大小比较小时,能够一次性的读取到内存中,那我们就不需要使用Mini-batch,\n",
|
||||
"- 如果训练样本的大小比较大时,一次读入不到内存或者现存中,那我们必须要使用 Mini-batch来分批的计算\n",
|
||||
"- Mini-batch size的计算规则如下,在内存允许的最大情况下使用2的N次方个size\n",
|
||||
"\n"
|
||||
@ -516,7 +516,7 @@
|
||||
"source": [
|
||||
"`torch.optim`是一个实现了各种优化算法的库。大部分常用优化算法都有实现,我们直接调用即可。\n",
|
||||
"### torch.optim.SGD\n",
|
||||
"随机梯度下降算法,带有动量(momentum)的算法作为一个可选参数可以进行设置,样例如下:"
|
||||
"随机梯度下降算法,带有动量(momentum)的算法作为一个可选参数可以进行设置,样例如下:"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -571,12 +571,12 @@
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 2.2.5 方差/偏差\n",
|
||||
"- 偏差度量了学习算法的期望预测与真实结果的偏离程序, 即 刻画了学习算法本身的拟合能力\n",
|
||||
"- 方差度量了同样大小的训练集的变动所导致的学习性能的变化, 即 模型的泛化能力\n",
|
||||
"- 偏差度量了学习算法的期望预测与真实结果的偏离程序,即刻画了学习算法本身的拟合能力\n",
|
||||
"- 方差度量了同样大小的训练集的变动所导致的学习性能的变化,即模型的泛化能力\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"从图中我们可以看出\n",
|
||||
"- 高偏差(high bias)的情况,一般称为欠拟合(underfitting),即我们的模型并没有很好的去适配现有的数据,拟合度不够。\n",
|
||||
"- 高偏差(high bias)的情况,一般称为欠拟合(underfitting),即我们的模型并没有很好的去适配现有的数据,拟合度不够。\n",
|
||||
"- 高方差(high variance)的情况一般称作过拟合(overfitting),即模型对于训练数据拟合度太高了,失去了泛化的能力。\n",
|
||||
"\n",
|
||||
"如何解决这两种情况呢?\n",
|
||||
@ -616,7 +616,7 @@
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 2.2.6 正则化\n",
|
||||
"利用正则化来解决High variance 的问题,正则化是在 Cost function 中加入一项正则化项,惩罚模型的复杂度,这里我们简单的介绍一下正则化的概念"
|
||||
"利用正则化来解决High variance 的问题,正则化是在 Cost function 中加入一项正则化项,惩罚模型的复杂度,这里我们简单的介绍一下正则化的概念"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user