Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
li工
apachecn-dl-zh
提交
56587e5c
A
apachecn-dl-zh
项目概览
li工
/
apachecn-dl-zh
与 Fork 源项目一致
Fork自
OpenDocCN / apachecn-dl-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-dl-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
56587e5c
编写于
1月 23, 2021
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2021-01-23 16:31:40
上级
17f763c6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
27 addition
and
25 deletion
+27
-25
new/rl-tf/01.md
new/rl-tf/01.md
+27
-25
未找到文件。
new/rl-tf/01.md
浏览文件 @
56587e5c
...
@@ -274,19 +274,19 @@ ReLU 的导数图,对于`x <= 0`,`f'(x) = 1`,对于`x > 0`,`f'(x) = 0`
...
@@ -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/322d38ac-27f4-4518-8a17-f58b391472d5.png
)
*
!
[](
img/fbdcd2fc-ce0e-4eb7-a681-cc83616c6af7.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
)
![](
img/6fb841aa-19f8-4076-8f53-668fdf30a60a.png
)
...
@@ -300,33 +300,35 @@ ReLU 的导数图,对于`x <= 0`,`f'(x) = 1`,对于`x > 0`,`f'(x) = 0`
...
@@ -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`
样本数据集。 因此,将是以下情况:
假设我们有两个输入要素,即二维和
`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`
个样本数据集的伪代码为:
先前
`m`
个样本数据集的伪代码为:
1.
初始化学习率
!
[](
img/f655a9c1-3f79-4dfe-962c-dc4fb378b05d.png
)
和时期数
`e`
的值
1.
初始化学习率
`α`
和时期数
`e`
的值
2.
循环遍历多个时期
`e`
'(每次完整的数据集将分批通过)
2.
循环遍历多个时期
`e`
'(每次完整的数据集将分批通过)
3.
将
`J`
(成本函数)和
`b`
(偏差)初始化为 0,对于
`W1`
和
`W2`
,您可以使用随机法线 或
**xavier 初始化**
(在下一节中说明)
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 :
...
@@ -351,11 +353,11 @@ for j → 1 to e :
# 什么是 Xavier 初始化?
# 什么是 Xavier 初始化?
Xavier 初始化是神经网络中权重的初始化,是遵循高斯分布的随机变量,其中方差
!
[](
img/73634749-294c-4aa7-8cc8-99fc9cbe8d2a.png
)
由
Xavier 初始化是神经网络中权重的初始化,是遵循高斯分布的随机变量,其中方差
`var(W)`
由
![](
img/f0d757fd-0f14-45c1-bbe8-64d82825de3a.png
)
![](
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 初始化?
# 为什么我们使用 xavier 初始化?
...
@@ -385,7 +387,7 @@ 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
)
![](
img/491169f7-46c4-469b-93cd-1cb8f4f01162.png
)
...
@@ -397,15 +399,15 @@ Xavier 初始化是神经网络中权重的初始化,是遵循高斯分布的
...
@@ -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 初始化是神经网络中权重的初始化,是遵循高斯分布的
...
@@ -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
)
![](
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`
,它将是:
由于这是一个分类问题,因此对于每个示例,输出将只有一个输出类别为 1,其余的将为零。 例如,对于
`i`
,它将是:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录