Update 2.2-deep-learning-basic-mathematics.ipynb

This commit is contained in:
古代中二龙 2019-11-04 16:34:14 +08:00 committed by GitHub
parent d18ddbb218
commit ce7d56b487
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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), 分别对xy求偏导数求得的梯度向量就是(∂f/∂x, ∂f/∂y)T简称grad f(x,y)或者▽f(x,y)。\n",
"\n",
"几何上讲,梯度就是函数变化增加最快的地方,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向梯度减少最快,也就是更加容易找到函数的最小值。\n",
"\n",
@ -504,7 +504,7 @@
"![](2.png)\n",
"普通的batch梯度下降法和Mini-batch梯度下降法代价函数的变化趋势如下图所示\n",
"![](3.png)\n",
"- 如果训练样本的大小比较小时,能够一次性的读取到内存中那我们就不需要使用Mini-batch\n",
"- 如果训练样本的大小比较小时能够一次性的读取到内存中那我们就不需要使用Mini-batch\n",
"- 如果训练样本的大小比较大时,一次读入不到内存或者现存中,那我们必须要使用 Mini-batch来分批的计算\n",
"- Mini-batch size的计算规则如下在内存允许的最大情况下使用2的N次方个size\n",
"![](4.png)\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",
"![](5.png)\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 中加入一项正则化项,惩罚模型的复杂度这里我们简单的介绍一下正则化的概念"
]
},
{