提交 56587e5c 编写于 作者: W wizardforcel

2021-01-23 16:31:40

上级 17f763c6
......@@ -274,19 +274,19 @@ ReLU 的导数图,对于`x <= 0`,`f'(x) = 1`,对于`x > 0`,`f'(x) = 0`
# 梯度下降算法
梯度下降算法是一种使用一阶导数查找函数最小值的优化算法,也就是说,我们仅将函数的参数区分为一阶。 在此,梯度下降算法的目的是使关于![](img/ed3142eb-4c35-49d1-9b1c-1564f27942bc.png)和![](img/d7942e82-2cc6-4f64-8b91-4a5e4e68eacd.png)的成本函数![](img/31fc771a-0a8b-4a2e-a93f-1549be49c2a5.png)最小化。
梯度下降算法是一种使用一阶导数查找函数最小值的优化算法,也就是说,我们仅将函数的参数区分为一阶。 在此,梯度下降算法的目的是使关于`W``b`的成本函数`J(W, b)`最小化。
此方法包括以下步骤,可进行多次迭代以最小化![](img/3e236823-8021-4b49-95e2-bf038fa95aed.png)
此方法包括以下步骤,可进行多次迭代以最小化`J(W, b)`
* ![](img/322d38ac-27f4-4518-8a17-f58b391472d5.png)
* ![](img/fbdcd2fc-ce0e-4eb7-a681-cc83616c6af7.png)
上式中使用的![](img/9c671944-f1a5-423b-97ae-b2ad19d731ab.png)是指学习率。 学习速率是学习代理适应新知识的速度。 因此,![](img/0e4f3f5b-d48c-4b5f-b40d-b39341719c57.png),即学习率是需要作为标量值或时间函数分配的超参数。 这样,在每次迭代中,![](img/32cc518e-96eb-49e7-b8ab-67e304786888.png)和![](img/6d301bc6-c3b7-48ea-aceb-b440b8fb2bab.png)的值都按照上式进行更新,直到成本函数的值达到可接受的最小值为止。
上式中使用的`α`是指学习率。 学习速率是学习代理适应新知识的速度。 因此,`α`,即学习率是需要作为标量值或时间函数分配的超参数。 这样,在每次迭代中,`W``b`的值都按照上式进行更新,直到成本函数的值达到可接受的最小值为止。
梯度下降算法意味着沿斜率向下移动。 曲线的斜率由关于参数的成本函数![](img/c62e96a0-90a4-4788-863f-7a497ef31dde.png)表示。 斜率(即斜率)给出了正斜率(如果为正)和负斜率的方向。 因此,我们必须使用负号与斜率相乘,因为我们必须与增加斜率的方向相反并朝减小斜率的方向相反。
梯度下降算法意味着沿斜率向下移动。 曲线的斜率由关于参数的成本函数`J`表示。 斜率(即斜率)给出了正斜率(如果为正)和负斜率的方向。 因此,我们必须使用负号与斜率相乘,因为我们必须与增加斜率的方向相反并朝减小斜率的方向相反。
使用最佳学习率![](img/a5fe656b-1845-4fcd-b587-bbd3c845aa3a.png),可以控制下降,并且我们不会过度降低局部最小值。 如果学习率![](img/324f63e5-df40-435b-ae53-7c0bd35fc4e7.png)非常小,那么收敛将花费更多时间,而如果学习率![](img/324f63e5-df40-435b-ae53-7c0bd35fc4e7.png)非常高,则由于迭代次数众多,它可能会过冲并错过最小值和偏差:
使用最佳学习率`α`,可以控制下降,并且我们不会过度降低局部最小值。 如果学习率`α`非常小,那么收敛将花费更多时间,而如果学习率`α`非常高,则由于迭代次数众多,它可能会过冲并错过最小值和偏差:
![](img/6fb841aa-19f8-4076-8f53-668fdf30a60a.png)
......@@ -300,33 +300,35 @@ ReLU 的导数图,对于`x <= 0`,`f'(x) = 1`,对于`x > 0`,`f'(x) = 0`
计算的基本步骤是:
1. 计算![](img/dde4c2c4-319a-4425-9bb1-d0a30f7764e3.png)
1. 计算`Z^(i) = WX^(i) + b, ∀i`
2. 计算![](img/da78ad24-b624-4c93-831d-4796852e9dc9.png),预测输出
2. 计算`y_hat^(i) = σ(Z^(i)), ∀i`,预测输出
3. 计算成本函数:![](img/5f23715e-3539-463e-abfc-3c9c24407512.png)
3. 计算成本函数:
![](img/5f23715e-3539-463e-abfc-3c9c24407512.png)
假设我们有两个输入要素,即二维和`m`样本数据集。 因此,将是以下情况:
1. ![](img/a3b2061e-6ea5-4a0c-a42b-7459f547e217.png)
1. `X = {x[1], x[2]}`
2. 权重![](img/dfc88f50-722b-458d-9db8-4e894e85e6ca.png)和偏差![](img/f0900117-fa43-4e42-a457-7b8219ca7b1a.png)
2. 权重`W = {w[1], w[2]}`和偏差`b`
3. 因此,![](img/8e7eccd8-e9eb-4881-8d41-b106d02bfe97.png)和![](img/5badbe12-5cd4-4d93-952d-609604ceb96e.png)
3. 因此,`z^(i) = w[1]x[1]^(i) + w[2]x[2]^(i) + b``y_hat^(i) = σ(z^(i))`
4. 计算![](img/bb37b90d-4ad8-4c30-a724-77a4033f9a41.png)(所有示例的平均损失)
4. 计算`J(W, b)`(所有示例的平均损失)
5. 计算关于`W1``W2`和![](img/5a89f1ca-0ad9-4fc4-a33c-5e86cd20a19d.png)的导数,分别为![](img/37e34547-c0af-4612-8c4c-2620cd9967fe.png),![](img/7901b633-0cb8-4a60-b5ba-f8914d35f918.png)和![](img/b3bfea69-c05a-4bc2-8917-d55075b434d8.png)
5. 计算关于`w[1]``w[2]``b`的导数,分别为`∂J/∂w[1]``∂J/∂w[2]``∂J/∂b`
6. 按照前面的梯度下降部分所述修改![](img/01cbb122-5d17-40e4-a491-b31ffbdd923e.png)和![](img/5023e1b4-0ebe-4747-a107-9b24c242bbed.png)
6. 按照前面的梯度下降部分所述修改`w[1]``w[2]``b`
先前`m`个样本数据集的伪代码为:
1. 初始化学习率![](img/f655a9c1-3f79-4dfe-962c-dc4fb378b05d.png)和时期数`e`的值
1. 初始化学习率`α`和时期数`e`的值
2. 循环遍历多个时期`e`'(每次完整的数据集将分批通过)
3.`J`(成本函数)和`b`(偏差)初始化为 0,对于`W1``W2`,您可以使用随机法线 或 **xavier 初始化**(在下一节中说明)
在此,a 是![](img/ceaa75dc-4585-4b36-a8c3-dd2b68020dda.png)`dw1`是![](img/ccc57303-c425-40a9-85af-ed1626be0b3a.png)`dw2`是![](img/c8121c4a-ce14-482f-9c4e-3293422533ea.png)`db`是![](img/4fa1d5c5-b308-49e6-8139-0aeee60ba588.png)。 每个迭代都包含一个循环遍历`m`个示例的循环。
在此,`a``y_hat``dw1``∂J/∂w[1]``dw2``∂J/∂w[2]``db``∂J/∂b`。 每个迭代都包含一个循环遍历`m`个示例的循环。
这里给出了相同的伪代码:
......@@ -351,11 +353,11 @@ for j → 1 to e :
# 什么是 Xavier 初始化?
Xavier 初始化是神经网络中权重的初始化,是遵循高斯分布的随机变量,其中方差![](img/73634749-294c-4aa7-8cc8-99fc9cbe8d2a.png)
Xavier 初始化是神经网络中权重的初始化,是遵循高斯分布的随机变量,其中方差`var(W)`
![](img/f0d757fd-0f14-45c1-bbe8-64d82825de3a.png)
其中,![](img/3d766227-5de7-4728-a458-569561e5626a.png)是当前层中的单元数,即传入的信号单元,![](img/915225f9-ecff-4106-8ee3-1c57e58c0f89.png)是下一层中的单元数,即传出的结果信号单元。 简而言之,![](img/d0542803-bc44-4acb-9336-6117ca9b5a75.png)是![](img/e7a5e994-9e7a-430c-90df-f9c83b99cae3.png)的形状。
其中,`n_in`是当前层中的单元数,即传入的信号单元,`n_out`是下一层中的单元数,即传出的结果信号单元。 简而言之,`n_in * n_out``W`的形状。
# 为什么我们使用 xavier 初始化?
......@@ -385,7 +387,7 @@ Xavier 初始化是神经网络中权重的初始化,是遵循高斯分布的
* 对聚合信号进行激活以创建更深层的内部表示,这些表示又是相应隐藏节点的值
参考上图,我们有三个输入功能![](img/08e07c6f-3487-48cf-9da0-ac1d5b589468.png)和![](img/45d82003-1dd4-4384-8964-96bab8e65d9c.png)。 显示值为 1 的节点被视为偏置单元。 除输出外,每一层通常都有一个偏置单元。 偏差单位可以看作是一个拦截项,在左右激活函数中起着重要作用。 请记住,隐藏层和其中的节点的数量是我们一开始定义的超参数。 在这里,我们将![](img/b27e3bd1-340c-4576-8805-b25a426e35b0.png)和![](img/dc417ad4-d548-4176-b05e-e4193e26620d.png)的隐藏层数定义为 1,将隐藏节点的数数定义为 3。 因此,可以说我们有三个输入单元,三个隐藏单元和三个输出单元(![](img/e0f0f3bb-5953-45d2-8a1a-cd0303871581.png)和![](img/7ccfb224-70cf-4cf8-b027-7d1eebdb7c8e.png),因为我们要预测的类别是三类)。 这将为我们提供与层关联的权重和偏差的形状。 例如,第 0 层具有 3 个单位,第 1 层具有 3 个单位。与第`i`层相关联的权重矩阵和偏差向量的形状如下:
参考上图,我们有三个输入功能`x[1], x[2], x[3]`。 显示值为 1 的节点被视为偏置单元。 除输出外,每一层通常都有一个偏置单元。 偏差单位可以看作是一个拦截项,在左右激活函数中起着重要作用。 请记住,隐藏层和其中的节点的数量是我们一开始定义的超参数。 在这里,我们将隐藏层数定义为 1,将隐藏节点的数数定义为 3,`a[1], a[2], a[3]`。 因此,可以说我们有三个输入单元,三个隐藏单元和三个输出单元(`h[1], h[2], h[3]`,因为我们要预测的类别是三类)。 这将为我们提供与层关联的权重和偏差的形状。 例如,第 0 层具有 3 个单位,第 1 层具有 3 个单位。与第`i`层相关联的权重矩阵和偏差向量的形状如下:
![](img/491169f7-46c4-469b-93cd-1cb8f4f01162.png)
......@@ -397,15 +399,15 @@ Xavier 初始化是神经网络中权重的初始化,是遵循高斯分布的
因此,形状如下:
* ![](img/643910b9-faf2-4b3d-94c8-78de55332589.png)将是![](img/0d15ae1d-38ef-46ea-8b44-99b15484ccef.png),![](img/651d43a9-e3e1-41bb-abfb-3ed94d0c2f25.png)将是![](img/36918b67-98db-4ceb-a2cd-6f3fb29a319b.png)
* `w[0, 1]`将是`3x3``b[0, 1]`将是`3`
* ![](img/520f2ea3-11c8-446f-ab1f-9f34dac875db.png)将是![](img/e4f8dae7-6e35-4ba0-b3da-b30dced8d3f3.png),![](img/8248caea-7531-4223-ac76-089fbabe1f2a.png)将是![](img/7bf0b148-274b-4a98-9e8c-6aa017330618.png)
* `w[1, 2]`将是`3x1``b[1, 2]`将是`1`
现在,让我们了解以下符号:
* ![](img/f132a689-d9e1-4520-92ec-02d904fa66f7.png):此处,是指将第`i`层中的节点`a`连接到第`i + 1`层中的节点`d`的权重值
* `w[a(i)]^d(i+1)`:此处,是指将第`i`层中的节点`a`连接到第`i + 1`层中的节点`d`的权重值
* ![](img/55e5bde4-f740-483e-be5c-ce23434dc99d.png):此处,它是指将第`i`层中的偏置单元节点连接到第`i + 1`层中的节点`d`的偏置值。
* `b[i, i+1]^d`:此处,它是指将第`i`层中的偏置单元节点连接到第`i + 1`层中的节点`d`的偏置值。
因此,可以通过以下方式计算隐藏层中的节点:
......@@ -427,13 +429,13 @@ Xavier 初始化是神经网络中权重的初始化,是遵循高斯分布的
这使我们结束了正向传播过程。 我们的下一个任务是通过反向传播训练神经网络(即训练权重和偏差参数)。
令实际输出类别为![](img/711b35c8-214e-4520-8f85-b799d4cb87cf.png)和![](img/494a3237-24ab-4544-b4e0-bf9403eeda93.png)
令实际输出类别为`y[1], y[2], y[3]`
回顾线性回归中的成本函数部分,我们使用交叉熵来表示成本函数。 由于成本函数定义为
![](img/fc10aaaf-bef5-473c-abaf-981aff989850.png)
其中,`C = 3`![](img/505d1c06-5937-46cd-9ea7-621b755fd7ae.png)`m`=示例数
其中,`C = 3``y[c] = Y[c], y_hat[c] = h[c]``m`示例数
由于这是一个分类问题,因此对于每个示例,输出将只有一个输出类别为 1,其余的将为零。 例如,对于`i`,它将是:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册