|
29 | 29 | "- 半监督学习 :在训练阶段结合了大量未标记的数据和少量标签数据。与使用所有标签数据的模型相比,使用训练集的训练模型在训练时可以更为准确。\n",
|
30 | 30 | "- 强化学习:我们设定一个回报函数(reward function),通过这个函数来确认否越来越接近目标,类似我们训练宠物,如果做对了就给他奖励,做错了就给予惩罚,最后来达到我们的训练目的。\n",
|
31 | 31 | "\n",
|
32 |
| - "这里我们只着重介绍监督学习,因为我们后面的绝大部们课程都是使用的监督学习的方法,在训练和验证时输入的数据既包含输入x,又包含x对应的输出y,即学习数据已经事先给出了正确答案。" |
| 32 | + "这里我们只着重介绍监督学习,因为我们后面的绝大部们课程都是使用的监督学习的方法,在训练和验证时输入的数据既包含输入x,又包含x对应的输出y,即学习数据已经事先给出了正确答案。" |
33 | 33 | ]
|
34 | 34 | },
|
35 | 35 | {
|
|
185 | 185 | "cell_type": "markdown",
|
186 | 186 | "metadata": {},
|
187 | 187 | "source": [
|
188 |
| - "其中参数(1, 1)代表输入输出的特征(feature)数量都是1. `Linear` 模型的表达式是 $y=w \\cdot x+b$, 其中 $w$ 代表权重, $b$ 代表偏置" |
| 188 | + "其中参数(1, 1)代表输入输出的特征(feature)数量都是1. `Linear` 模型的表达式是 $y=w \\cdot x+b$,其中 $w$ 代表权重, $b$ 代表偏置" |
189 | 189 | ]
|
190 | 190 | },
|
191 | 191 | {
|
|
241 | 241 | "cell_type": "markdown",
|
242 | 242 | "metadata": {},
|
243 | 243 | "source": [
|
244 |
| - "准备训练数据: `x_train`, `y_train` 的形状是 (256, 1), 代表 `mini-batch` 大小为256, `feature` 为1. `astype('float32')` 是为了下一步可以直接转换为 `torch.float`." |
| 244 | + "准备训练数据: `x_train`, `y_train` 的形状是 (256, 1), 代表 `mini-batch` 大小为256, `feature` 为1. `astype('float32')` 是为了下一步可以直接转换为 `torch.float`." |
245 | 245 | ]
|
246 | 246 | },
|
247 | 247 | {
|
|
327 | 327 | "cell_type": "markdown",
|
328 | 328 | "metadata": {},
|
329 | 329 | "source": [
|
330 |
| - "训练完成了,看一下训练的成果是多少. 用 `model.parameters()` 提取模型参数. $w$, $b$ 是我们所需要训练的模型参数\n", |
| 330 | + "训练完成了,看一下训练的成果是多少。用 `model.parameters()` 提取模型参数。 $w$, $b$ 是我们所需要训练的模型参数\n", |
331 | 331 | "我们期望的数据 $w=5$,$b=7$ 可以做一下对比"
|
332 | 332 | ]
|
333 | 333 | },
|
|
386 | 386 | "source": [
|
387 | 387 | "以上就是一个使用PyTorch做线性回归的简单样例了,下面我们会对上面的内容做详细的介绍\n",
|
388 | 388 | "## 2.2.3 损失函数(Loss Function)\n",
|
389 |
| - "损失函数(loss function)是用来估量模型的预测值(我们例子中的output)与真实值(例子中的y_train)的不一致程度,它是一个非负实值函数,损失函数越小,模型的鲁棒性就越好。\n", |
| 389 | + "损失函数(loss function)是用来估量模型的预测值(我们例子中的output)与真实值(例子中的y_train)的不一致程度,它是一个非负实值函数,损失函数越小,模型的鲁棒性就越好。\n", |
390 | 390 | "我们训练模型的过程,就是通过不断的迭代计算,使用梯度下降的优化算法,使得损失函数越来越小。损失函数越小就表示算法达到意义上的最优。\n",
|
391 | 391 | "\n",
|
392 | 392 | "这里有一个重点:因为PyTorch是使用mini-batch来进行计算的,所以损失函数的计算出来的结果已经对mini-batch取了平均\n",
|
|
427 | 427 | "metadata": {},
|
428 | 428 | "source": [
|
429 | 429 | "### nn.CrossEntropyLoss:\n",
|
430 |
| - "多分类用的交叉熵损失函数,LogSoftMax和NLLLoss集成到一个类中,会调用nn.NLLLoss函数,我们可以理解为CrossEntropyLoss()=log_softmax() + NLLLoss()\n", |
| 430 | + "多分类用的交叉熵损失函数,LogSoftMax和NLLLoss集成到一个类中,会调用nn.NLLLoss函数,我们可以理解为CrossEntropyLoss()=log_softmax() + NLLLoss()\n", |
431 | 431 | "\n",
|
432 | 432 | "\n",
|
433 | 433 | " $ \\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 | 469 | "source": [
|
470 | 470 | "### 梯度\n",
|
471 | 471 | "在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。\n",
|
472 |
| - "例如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,简称grad f(x,y)或者▽f(x,y)。\n", |
| 472 | + "例如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,简称grad f(x,y)或者▽f(x,y)。\n", |
473 | 473 | "\n",
|
474 | 474 | "几何上讲,梯度就是函数变化增加最快的地方,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向梯度减少最快,也就是更加容易找到函数的最小值。\n",
|
475 | 475 | "\n",
|
|
504 | 504 | "\n",
|
505 | 505 | "普通的batch梯度下降法和Mini-batch梯度下降法代价函数的变化趋势,如下图所示:\n",
|
506 | 506 | "\n",
|
507 |
| - "- 如果训练样本的大小比较小时,能够一次性的读取到内存中,那我们就不需要使用Mini-batch,\n", |
| 507 | + "- 如果训练样本的大小比较小时,能够一次性的读取到内存中,那我们就不需要使用Mini-batch,\n", |
508 | 508 | "- 如果训练样本的大小比较大时,一次读入不到内存或者现存中,那我们必须要使用 Mini-batch来分批的计算\n",
|
509 | 509 | "- Mini-batch size的计算规则如下,在内存允许的最大情况下使用2的N次方个size\n",
|
510 | 510 | "\n"
|
|
516 | 516 | "source": [
|
517 | 517 | "`torch.optim`是一个实现了各种优化算法的库。大部分常用优化算法都有实现,我们直接调用即可。\n",
|
518 | 518 | "### torch.optim.SGD\n",
|
519 |
| - "随机梯度下降算法,带有动量(momentum)的算法作为一个可选参数可以进行设置,样例如下:" |
| 519 | + "随机梯度下降算法,带有动量(momentum)的算法作为一个可选参数可以进行设置,样例如下:" |
520 | 520 | ]
|
521 | 521 | },
|
522 | 522 | {
|
|
571 | 571 | "metadata": {},
|
572 | 572 | "source": [
|
573 | 573 | "## 2.2.5 方差/偏差\n",
|
574 |
| - "- 偏差度量了学习算法的期望预测与真实结果的偏离程序, 即 刻画了学习算法本身的拟合能力\n", |
575 |
| - "- 方差度量了同样大小的训练集的变动所导致的学习性能的变化, 即 模型的泛化能力\n", |
| 574 | + "- 偏差度量了学习算法的期望预测与真实结果的偏离程序,即刻画了学习算法本身的拟合能力\n", |
| 575 | + "- 方差度量了同样大小的训练集的变动所导致的学习性能的变化,即模型的泛化能力\n", |
576 | 576 | "\n",
|
577 | 577 | "\n",
|
578 | 578 | "从图中我们可以看出\n",
|
579 |
| - "- 高偏差(high bias)的情况,一般称为欠拟合(underfitting),即我们的模型并没有很好的去适配现有的数据,拟合度不够。\n", |
| 579 | + "- 高偏差(high bias)的情况,一般称为欠拟合(underfitting),即我们的模型并没有很好的去适配现有的数据,拟合度不够。\n", |
580 | 580 | "- 高方差(high variance)的情况一般称作过拟合(overfitting),即模型对于训练数据拟合度太高了,失去了泛化的能力。\n",
|
581 | 581 | "\n",
|
582 | 582 | "如何解决这两种情况呢?\n",
|
|
616 | 616 | "metadata": {},
|
617 | 617 | "source": [
|
618 | 618 | "## 2.2.6 正则化\n",
|
619 |
| - "利用正则化来解决High variance 的问题,正则化是在 Cost function 中加入一项正则化项,惩罚模型的复杂度,这里我们简单的介绍一下正则化的概念" |
| 619 | + "利用正则化来解决High variance 的问题,正则化是在 Cost function 中加入一项正则化项,惩罚模型的复杂度,这里我们简单的介绍一下正则化的概念" |
620 | 620 | ]
|
621 | 621 | },
|
622 | 622 | {
|
|
0 commit comments