Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lzh_me
apachecn-dl-zh
提交
f49206b8
A
apachecn-dl-zh
项目概览
lzh_me
/
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,发现更多精彩内容 >>
提交
f49206b8
编写于
12月 25, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-12-25 18:13:43
上级
6e85322f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
29 addition
and
27 deletion
+29
-27
new/intel-proj-py/01.md
new/intel-proj-py/01.md
+29
-27
未找到文件。
new/intel-proj-py/01.md
浏览文件 @
f49206b8
...
...
@@ -54,13 +54,13 @@
图 1.4:人工神经网络
输入
`x ∈ R^N`
穿过神经单位的连续层,这些层以分层方式排列。 特定层中的每个神经元都接收来自先前层的神经元的输入,这些输入被它们之间的连接权重所衰减或放大。 权重
!
[](
img/4e191d12-e7be-4994-a0e2-cb0864478dd8.png
)
对应于
`l`
层第
`i`
个神经元与
`l + 1`
层第
`j`
个神经元。 同样,每个神经元单元
`i`
在特定层
`1`
中都有一个偏见!
[](
img/b6085bec-f07c-40e8-b725-bdbfef33657a.png
)
。 神经网络为输入向量
`x ∈ R^N`
预测输出!
[](
img/5ec2c1e6-86bc-435e-ad5c-67685b979479.png
)
。 如果数据的实际标签是
`y`
,其中
`y`
取连续值,则神经元网络将预测误差最小化!
[](
img/686860b4-bb80-4174-b4cc-b61f26a86869.png
)
来学习权重和偏差。 当然,对于所有标记的数据点,必须将误差最小化:
`(xi, yi), i ∈ 1, 2, ..., m`
。
输入
`x ∈ R^N`
穿过神经单位的连续层,这些层以分层方式排列。 特定层中的每个神经元都接收来自先前层的神经元的输入,这些输入被它们之间的连接权重所衰减或放大。 权重
`w[ij]^(l)`
对应于
`l`
层第
`i`
个神经元与
`l + 1`
层第
`j`
个神经元。 同样,每个神经元单元
`i`
在特定层
`1`
中都有一个偏见
`b[i]^(l)`
。 神经网络为输入向量
`x ∈ R^N`
预测输出
`y_hat`
。 如果数据的实际标签是
`y`
,其中
`y`
取连续值,则神经元网络将预测误差最小化
`(y - y_hat)^2`
来学习权重和偏差。 当然,对于所有标记的数据点,必须将误差最小化:
`(xi, yi), i ∈ 1, 2, ..., m`
。
如果我们用一个公共向量
`W`
表示一组权重和偏差,并且预测中的总误差由
`C`
表示,则在训练过程中,估计的
`W`
可以表示为:
![](
img/973e52ab-5ebb-40a0-941c-20665d118f10.png
)
同样,预测输出
!
[](
img/ef875e3c-8643-4f92-a309-b92aefc033b7.png
)
可以由输入
`x`
的函数表示,并由权重矢量
`W`
进行参数化,如下所示:
同样,预测输出
`y_hat`
可以由输入
`x`
的函数表示,并由权重矢量
`W`
进行参数化,如下所示:
![](
img/9e08ed5e-7e12-46d1-a2cb-a2e343d9c8d2.png
)
...
...
@@ -78,7 +78,7 @@
![](
img/b8e45aea-221b-44e3-bbc3-0d9e88a4cf2d.png
)
在这里,
!
[](
img/82b31af0-64ea-440f-b4f3-281460353497.png
)
是第
`i`
个数据点的第
`j`
类的输出标签。
在这里,
`y[i]^(j)`
是第
`i`
个数据点的第
`j`
类的输出标签。
# 神经激活单位
...
...
@@ -146,7 +146,7 @@ ReLU 的限制条件之一是其输入负值的零梯度。 这可能会减慢
![](
img/66329819-1528-4067-afc8-bf3e505ecb09.png
)
将为 LReLU 激活函数提供
!
[](
img/7e701921-1d53-4bbb-9ed7-e386eacc553c.png
)
参数,而对于参数 ReLU,!
[](
img/21c3900a-a283-44ba-b15e-21d1faf0b243.png
)
是神经网络将通过训练学习的参数。 下图显示了 LReLU 激活函数的输出:
将为 LReLU 激活函数提供
`α`
参数,而对于参数 ReLU,
`α`
是神经网络将通过训练学习的参数。 下图显示了 LReLU 激活函数的输出:
![](
img/908a6fec-a34a-4e27-a0a4-27dd3b5d84cc.png
)
...
...
@@ -208,27 +208,29 @@ ReLU 的限制条件之一是其输入负值的零梯度。 这可能会减慢
正如您在前面的表达式中看到的那样,导数不过是预测中的错误。 通常,在存在回归问题的情况下,输出单元激活函数是线性的,因此适用以下表达式:
*![](img/714abd7d-0c22-40db-80f2-bfc0e479ef6a.png)*
![](
img/714abd7d-0c22-40db-80f2-bfc0e479ef6a.png
)
因此,如果我们要计算成本函数相对于输出单元总输入的梯度,则为
!
[](
img/45edd36c-31ff-4c19-b6e9-2fd00488402a.png
)
。 这仍然等于输出预测中的误差。
因此,如果我们要计算成本函数相对于输出单元总输入的梯度,则为
`∂C/∂s[1]^(3)`
。 这仍然等于输出预测中的误差。
根据输入权重和激活,输出单元上的总输入可以表示为:
![](
img/153c33ee-f998-4650-be8d-a77f9ef8ffbe.png
)
这意味着
*![](img/23be1d62-249e-47a0-8ddc-72bf17094dbb.png)*
以及成本函数相对于权重的导数
*![](img/4bc4d5a7-a122-417f-b35d-479e4a793029.png)*
通过以下方式得出:
这意味着
`∂s[1]^(3)/∂w[21]^(3) = z[2]^(3)`
以及成本函数相对于权重
`w[21]^(3)`
的导数
通过以下方式得出:
![](
img/34c1605c-eb43-4d09-b029-b8177ecd1dc6.png
)
如您所见,相对于最终输出层之前的层中的权重,该错误在计算成本函数的梯度时反向传播。 当我们计算成本函数相对于广义权重的梯度
!
[](
img/5b8b2334-2462-449b-b31f-360dc3027ca7.png
)
时,这变得更加明显。 取对应于
`j = 1`
和
`k = 2`
的权重; 即!
[](
img/5b8b2334-2462-449b-b31f-360dc3027ca7.png
)
。 成本函数
`C`
相对于该权重的梯度可以表示为:
如您所见,相对于最终输出层之前的层中的权重,该错误在计算成本函数的梯度时反向传播。 当我们计算成本函数相对于广义权重的梯度
`w[jk]^(2)`
时,这变得更加明显。 取对应于
`j = 1`
和
`k = 2`
的权重; 即
`w[jk]^(2)`
。 成本函数
`C`
相对于该权重的梯度可以表示为:
![](
img/474751ea-71f8-4c57-9d16-1679ed2fbea5.png
)
现在,
!
[](
img/e3b5f588-54b7-4b7f-a624-20c8c63fe4f5.png
)
表示!
[](
img/d5f34043-fdeb-48ca-bf1b-d1a1915ba77d.png
)
。
现在,
`∂s[2]^(2)/∂w[12]^(2) = z[1]^(2)`
表示:
因此,一旦我们确定了成本函数相对于神经元总输入的梯度为!
[](
img/01b2beed-5ae3-478a-b99c-77eca4595b96.png
)
,则任何权重的梯度
`w`
贡献了总输入量
`s`
,可以通过简单地乘以与重量相关的激活
`z`
来获得。
![](
img/d5f34043-fdeb-48ca-bf1b-d1a1915ba77d.png
)
现在,成本函数相对于总输入的梯度!
[](
img/e254c4c2-01df-42fe-a32b-94153a25e69b.png
)
可以再次通过链式法则得出,如下所示:
因此,一旦我们确定了成本函数相对于神经元总输入的梯度为
`∂C/∂s`
,则任何权重的梯度
`w`
贡献了总输入量
`s`
,可以通过简单地乘以与重量相关的激活
`z`
来获得。
现在,成本函数相对于总输入的梯度
`s[2]^(2)`
可以再次通过链式法则得出,如下所示:
![](
img/ff5d7314-4a37-458c-933b-25a883f492bd.png
)
...
...
@@ -242,7 +244,7 @@ ReLU 的限制条件之一是其输入负值的零梯度。 这可能会减慢
![](
img/ed1832d2-e65e-4568-8594-f5ded856cfe3.png
)
在前面的派生梯度表达式中,您可以看到预测误差
!
[](
img/60984e36-9d78-4e8d-9518-fc92f78f55a4.png
)
通过与相关的激活和权重(根据微分链规则)组合以计算每一层权重的梯度而向后传播 ,因此是 AI 术语中的反向传播名称。
在前面的派生梯度表达式中,您可以看到预测误差
`(y_hat - y)`
通过与相关的激活和权重(根据微分链规则)组合以计算每一层权重的梯度而向后传播 ,因此是 AI 术语中的反向传播名称。
# 卷积神经网络
...
...
@@ -290,15 +292,15 @@ ReLU 的限制条件之一是其输入负值的零梯度。 这可能会减慢
在 RNN 中,步骤
`t`
中的输出错误会尝试纠正先前时间步中的预测,并通过
`k ∈ 1, 2, ..., t-1`
来概括。 通过传播先前时间步长中的错误来实现。 这有助于 RNN 了解彼此相距较远的单词之间的长期依赖性。 实际上,由于梯度问题的消失和爆炸,并非总是可能通过 RNN 学习这么长的依赖关系。
如您所知,神经网络通过梯度下降来学习,并且可以通过以下步骤来学习单词在时间步
`t`
与在先序列步
`k`
之间的关系。 记忆状态
!
[](
img/f6a98a54-7272-4859-bbdd-8f2347ec8a72.png
)
相对于记忆状态
`h[i]^(t)`
的梯度。 用以下公式表示:
如您所知,神经网络通过梯度下降来学习,并且可以通过以下步骤来学习单词在时间步
`t`
与在先序列步
`k`
之间的关系。 记忆状态
`h[t]^(i)`
相对于记忆状态
`h[i]^(t)`
的梯度。 用以下公式表示:
![](
img/4b851df6-5d8f-4c92-861e-2c0066c19254.png
)
如果从序列步骤
`k`
的存储状态
!
[](
img/b7da7650-c906-4c3d-9191-77ef72550882.png
)
到序列步骤
`k + 1`
的存储状态!
[](
img/ce311540-8fcf-46a5-bf55-4b9506efed8f.png
)
的权重连接由
*
给出
`u[ii] ∈ W[hh]`
,则以下是正确的:
如果从序列步骤
`k`
的存储状态
`h[k]^(i)`
到序列步骤
`k + 1`
的存储状态
`h[k + 1]^(i)`
的权重连接由
*
给出
`u[ii] ∈ W[hh]`
,则以下是正确的:
![](
img/94bf384a-86e7-413d-ae16-9b3f5249eef1.png
)
在前面的等式中,
!
[](
img/6e3eda2d-3282-41ef-a0eb-12a7860c951b.png
)
是在时间步
`k + 1`
时存储状态
`i`
的总输入,因此情况如下:
在前面的等式中,
`s[k + 1]^(i)`
是在时间步
`k + 1`
时存储状态
`i`
的总输入,因此情况如下:
![](
img/82fd4549-3b28-4289-9145-320579f8f364.png
)
...
...
@@ -308,7 +310,7 @@ ReLU 的限制条件之一是其输入负值的零梯度。 这可能会减慢
![](
img/a5818e53-89c6-4a7a-8f79-f71fdfc2535d.png
)
对于 RNN,函数
`f[2]`
通常为 Sigmoid 或 tanh,其饱受饱和度的困扰,即具有超出指定输入值范围的低梯度。 现在,由于
`f[2]`
的导数彼此相乘,因此,如果激活函数的输入在饱和区工作,则
!
[](
img/262411c9-5926-4e82-913c-5a58147cc084.png
)
的斜率可以变为零,即使相对
`tk`
的中等值。 即使
`f[2]`
函数在饱和区中不起作用,但 Sigmoids 的
`f[2]`
函数的梯度始终较小 比
`1`
难,因此很难学习序列中单词之间的远距离依存关系。 同样,可能会由于!
[](
img/0a6a961e-803e-4a05-aa14-d1b9b444e272.png
)
因子而出现爆炸性梯度问题。 假设步
`t`
和
`k`
之间的距离约为
`10`
,而重量
`u[ii]`
,大约两点。 在这种情况下,梯度将被放大两倍,即
`2 ^ 10 = 1024`
,从而导致爆炸梯度问题。
对于 RNN,函数
`f[2]`
通常为 Sigmoid 或 tanh,其饱受饱和度的困扰,即具有超出指定输入值范围的低梯度。 现在,由于
`f[2]`
的导数彼此相乘,因此,如果激活函数的输入在饱和区工作,则
`∂h[t]^(i)/∂h[k]^(i)`
的斜率可以变为零,即使相对
`tk`
的中等值。 即使
`f[2]`
函数在饱和区中不起作用,但 Sigmoids 的
`f[2]`
函数的梯度始终较小 比
`1`
难,因此很难学习序列中单词之间的远距离依存关系。 同样,可能会由于
`u[ii]^(t - k)`
因子而出现爆炸性梯度问题。 假设步
`t`
和
`k`
之间的距离约为
`10`
,而重量
`u[ii]`
,大约两点。 在这种情况下,梯度将被放大两倍,即
`2 ^ 10 = 1024`
,从而导致爆炸梯度问题。
# 长短期记忆(LSTM)单元
...
...
@@ -326,7 +328,7 @@ ReLU 的限制条件之一是其输入负值的零梯度。 这可能会减慢
![](
img/16cfb5c1-3e84-497e-8725-fc5c0e571a30.png
)
潜在的新候选细胞状态
!
[](
img/9da8cf00-c42f-4fd3-be55-18a2334cf1c6.png
)
表示如下:
潜在的新候选细胞状态
`C_tilde[t]`
表示如下:
![](
img/d10b017e-3e19-4c63-8ece-90ca7b3d2dfe.png
)
...
...
@@ -342,7 +344,7 @@ ReLU 的限制条件之一是其输入负值的零梯度。 这可能会减慢
![](
img/55a8e2c1-d673-4016-b4f2-a2baf36f73ed.png
)
现在出现了一个大问题:LSTM 如何避免消失的梯度问题? LSTM 中
!
[](
img/f1facab3-c62a-44c3-8892-0b8ead3bec9e.png
)
的等效项由!
[](
img/b8df6cd0-edae-4d0f-9cf8-a2815a1a3d8f.png
)
给出,可以用以下产品形式表示:
现在出现了一个大问题:LSTM 如何避免消失的梯度问题? LSTM 中
`∂h[t]^(i)/∂h[k]^(i)`
的等效项由
`∂C[t]^(i)/∂C[k]^(i)`
给出,可以用以下产品形式表示:
![](
img/0467935c-2261-4019-86e5-d5cb976fdcfb.png
)
...
...
@@ -354,7 +356,7 @@ ReLU 的限制条件之一是其输入负值的零梯度。 这可能会减慢
![](
img/636e59ba-65ee-410a-8dce-c19ce20565c6.png
)
结果,梯度表达式
!
[](
img/b78e0488-2d7f-46c7-a991-ca4eaf621665.png
)
变为以下:
结果,梯度表达式
`∂C[t]^(i)/∂C[k]^(i)`
变为以下:
![](
img/78f1eac4-0f48-4f0f-8521-344d3a317e9d.png
)
...
...
@@ -406,7 +408,7 @@ Figure 1.14: GAN architecture
![](
img/9dd0ea39-6a35-49d3-aa07-47e8242fd453.png
)
现在,生成器的任务是最大化实用程序
!
[](
img/171ac44a-3b7b-4819-9214-46d7b1e58324.png
)
或最小化实用程序!
[](
img/0e8e967d-8582-409c-ae34-4c843db5d7f7.png
)
。 !
[](
img/52aebda1-9abf-47bc-a5cc-f5ae4530e691.png
)
的表达式可以重新安排如下:
现在,生成器的任务是最大化实用程序
`V(G, D_hat)`
或最小化实用程序
`-V(G, D_hat)`
。
`-V(G, D_hat)`
的表达式可以重新安排如下:
![](
img/2e348883-3d4b-421d-940e-8c0c8a593af0.png
)
...
...
@@ -414,7 +416,7 @@ Figure 1.14: GAN architecture
![](
img/8893fadf-3fbf-4c42-bb8d-7a27f14dcb76.png
)
因此,我们可以看到生成器最小化
!
[](
img/18728b2c-5f24-4bbc-888d-541116e69eeb.png
)
等于最小化实际分布
`P(x)`
与生成器生成的样本分布之间的 Jensen Shannon 散度
`G`
(即
`G(x)`
)。
因此,我们可以看到生成器最小化
`-V(G, D_hat)`
等于最小化实际分布
`P(x)`
与生成器生成的样本分布之间的 Jensen Shannon 散度
`G`
(即
`G(x)`
)。
训练 GAN 并不是一个简单的过程,在训练这样的网络时我们需要考虑几个技术方面的考虑。 我们将使用高级 GAN 网络在第 4 章“使用 GANs 的时装行业中的风格迁移”中构建跨域风格迁移应用程序。
...
...
@@ -442,7 +444,7 @@ Figure 1.14: GAN architecture
![](
img/94a7a7da-3528-4fb2-9e42-1af592e0c024.png
)
现在,马尔可夫决策过程是一个随机过程,无法每次基于
`S[t]`
和
`a[t]`
进行相同的下一步
`S[t + 1]`
; 因此,我们对未来的奖励应用了折扣系数
!
[](
img/ea70164f-5568-4256-8b57-5b94e2423042.png
)
。 这意味着长期奖励可以更好地表示为:
现在,马尔可夫决策过程是一个随机过程,无法每次基于
`S[t]`
和
`a[t]`
进行相同的下一步
`S[t + 1]`
; 因此,我们对未来的奖励应用了折扣系数
`γ`
。 这意味着长期奖励可以更好地表示为:
![](
img/4a4b48fe-0a74-4d0f-92ad-bad7fdc7fb35.png
)
...
...
@@ -450,7 +452,7 @@ Figure 1.14: GAN architecture
![](
img/b3ecdb7c-d4cf-48a2-af93-c969b62fb41e.png
)
在每个状态
`s ∈ S`
,Q 学习中的主体尝试采取行动
!
[](
img/06b5dce2-74cb-4521-869a-cdf586c86f70.png
)
,以最大化其长期回报。 Q 学习算法是一个迭代过程,其更新规则如下:
在每个状态
`s ∈ S`
,Q 学习中的主体尝试采取行动
`α ∈ A`
,以最大化其长期回报。 Q 学习算法是一个迭代过程,其更新规则如下:
![](
img/b6e4a367-e0aa-406d-bd8b-5e1b2cb8c1d7.png
)
...
...
@@ -458,9 +460,9 @@ Figure 1.14: GAN architecture
处于状态
`s[t]`
的采取行动
`a[t]`
的总累积奖励
`Q(s[t], a[t])`
取决于即时奖励
`r[t]`
以及在新步骤
`s[t+1]`
处的,我们希望的最大长期回报。 在马尔可夫决策过程中,新状态
`s[t + 1]`
随机依赖于当前状态,即
`s[t]`
,然后通过
`P(S[t+1]/S[t];r[t])`
形式的概率密度/质量函数选取的动作
`a[t]`
。
该算法通过根据
!
[](
img/bdb0479f-f8a3-491a-a423-17d150e6d6fe.png
)
的值对旧期望值和新长期奖励值进行加权平均,来不断更新期望长期累积奖励。
该算法通过根据
`α`
的值对旧期望值和新长期奖励值进行加权平均,来不断更新期望长期累积奖励。
通过迭代算法构建了
`Q(s, a)`
函数后,在基于给定状态
`s`
进行游戏时,我们可以采取最佳措施
!
[](
img/d91fdd02-4626-4db2-9fc4-1a656f64dde2.png
)
, 作为最大化 Q 功能的策略:
通过迭代算法构建了
`Q(s, a)`
函数后,在基于给定状态
`s`
进行游戏时,我们可以采取最佳措施
`a_hat`
, 作为最大化 Q 功能的策略:
![](
img/88e6ee5c-d64d-4d70-a9cf-ee3eb0e6c32a.png
)
...
...
@@ -538,7 +540,7 @@ Figure 1.14: GAN architecture
图 1.20:自编码器架构
自编码器有两个部分:编码器和解码器。 编码器尝试将输入数据
`x`
投影到隐藏层
`h`
中。 解码器尝试从隐藏层
`h`
重构输入。 通过最小化重构误差,即来自解码器和原始输入的重构输入
!
[](
img/359986dd-2b2c-43d7-a706-1730baaa010c.png
)
之间的误差,可以训练伴随此类网络的权重。 如果输入是连续的,则最小化重构误差的平方和,以学习自编码器的权重。
自编码器有两个部分:编码器和解码器。 编码器尝试将输入数据
`x`
投影到隐藏层
`h`
中。 解码器尝试从隐藏层
`h`
重构输入。 通过最小化重构误差,即来自解码器和原始输入的重构输入
`x_tilde`
之间的误差,可以训练伴随此类网络的权重。 如果输入是连续的,则最小化重构误差的平方和,以学习自编码器的权重。
如果我们用函数
`f[W](x)`
表示编码器,而解码器则用
`f[U](x)`
表示,其中
`W`
和
`U`
是与编码器和解码器关联的权重矩阵,那么情况如下:
...
...
@@ -550,7 +552,7 @@ Figure 1.14: GAN architecture
![](
img/5ecc227c-e830-4604-898b-f08d92be4d0a.png
)
(3)
通过最小化
`(3)`
的成本函数,可以学习自编码器的最佳权重
!
[](
img/3f710299-ee2e-40cf-b7ae-7be06074f7c9.png
)
,如下所示:
通过最小化
`(3)`
的成本函数,可以学习自编码器的最佳权重
`W_hat, U_hat`
,如下所示:
![](
img/1a645659-bc76-482d-9d08-7c790e29013e.png
)
(4)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录