开发者学堂课程【深度学习与自动驾驶:自动驾驶中的循环神经网络(1)】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/533/detail/7157
自动驾驶中的循环神经网络(1)
内容介绍
一、Flavors of Neural Networks
二、Back to Basics: Backpropagation
内容简介:
之前讲过普通的神经网络,全连接的神经网络,讲过作用于图像的卷积神经网络,深度强化学习。将一个神经网络插入一个强化学习算法此时这个系统不仅要感知世界还要发挥作用,并收集奖励。今天将会讲到递归神经网络。首先是关于课程的事项。网址是 cars.nit.edu。如果是一个正式的学生需要注册一个账户,这是要求之一。需要有一个帐户如果想获得分数,需要提交代码,在DeepTaftitIS,DeepTeslaJSE 上,而在 DeepTaftitIS 上,必须有一个速度超过65英里/小时的神经网络。
一、Flavors of Neural Networks
Vanilla 神经网络是计算一个输入映射到一个输出的逼近函数,一个例子是将图像映射到图像中显示的数字,在 imagnet 中,是将图像中的对象,它可以是任何东西。实际上,卷积神经网络可以对音频进行操作,可以给它一段音频一个五秒的音频片段,它仍可以算作一个输入。因为它是固定大小,只要输入的大小是固定的,那就是一段输入,只要有基准数据,将那段输入映射到某个输出的基准数据。这就是Vanilla神经网络。无论是否有全连接的神经网络,或卷积神经网络。递归神经网络,他们计算的函数有,一对多,多对一,以及多对多,也可以是双向的。这意味着什么?它们会输入序列,时间序列,音频,视频,只要有一个数据连接数据的时间动态性,比每个单独帧的空间内容更重要。所以,当有大量的信息,按顺序传送是随着时间变化的任何类型的数据,那就是想用递归神经网络的时候,如语音,自然语言,音频。而它功能就是对它们中大多数来说,他们发光的地方是输入的大小是可变的。所以没有固定的数据块输入是可变的,输出也是一样,所以可以给它一个语音序列。几秒钟,然后输出,说话者是男性还是女性的单一标签,这就是多对一,同样可以进行多对多的翻译。可以将自然语言输入网络,比如西班牙语,输出是英文。机器翻译,这就是多对多。而且多对多都不需要直接映射到相同大小的序列,对于视频来说序列大小可能标注每一帧,输入某人打篮球的秒剪辑,可以标注每一帧,计算每一帧中的人数。这是多对多,输入和输出的大小一样。
问题:是否有任何模型有输出和输入的反馈?
这正是递归神经网络。它产生输出并复制该输出,并将其循环回去。这几乎是递归神经网络的定义。在那里有一个循环产生输出并且再次将输出作为输入。对于多对多来说,其序列是不对齐的。比如机器翻译,输出序列的大小,可能与输入序列完全不同。可以开始一首歌,学习一首给定歌曲的音频,让递归神经网络,接着这首歌创作一段时间,所以它可以学习,生成音频,自然语言,视频序列。
二、Back to Basics: Backpropagation
不会有太多方程式,但是这是优雅的简单,必须涉及反向传播。这也是如果有点懒情,去上网并开始使用 TenSorFlow 的基本教程。忽略了如何反向传播工作,在的操作下,可以认为它是正常的。给它一些输入一些输出,就像乐高积木一样可以把它们组装起来,就像可能用 DeepTraffic 完成的一样。把一堆图层放在一起,然后按Tain,反向传播,目前神经网络的机制是所知道的用于训练最好的机制。所以需要了解反向传播简单的能力,但也需要了解缺点。总结一下,在图片的顶端网络上有一个输入图像,还有一堆神经元,每个神经元都有可微的平滑的激活函数,然后当通过激活函数时,将一个输入通过这个网络可微的计算节点,产生一个输出,在这个输出中,也有一个基准数据。想要或期望网络产生的值是正确的和,可以观望网络实际产生的值,和所希望它产生的值的差异。这就是误差。然后反向传播那个误差用于惩罚和奖励,权重和参数来改变输出。
1、Backpropagation: By Example
f(x,y,2)=(x十y)z
Modularity: We compute an arbitrary function locally in stages
q=x十Y
f=qz
一个简单的例子,有一个函数,它的输入放在最前面,三个变量xyz,这个函数做两件事,对 x 和 y 求和。然后在将求和结果与z相乘,然后将这个过程构想成一个电路,一个电路门,它有一个加法门和不乘法门,输入一些数,那些蓝色的数就是输入 x 令为-2,y 是5,z是-4,然后通过电路做正推法,来产生结果。2加正5等于3,q是那个中间值。等于3,这很简单,并且理解它很重要,因为关于神经网络的一切都是建立在这些概念之上的。加法门得到了q,然后3乘以-4是-12。这是输出。该神经网络电路的输出。如果按照这样去做了,将会得到-12,正推法用蓝色标注,逆推法之后会,用红色标注,想要做的是让 f 满意的事,为了输出尽可能高。为-12马马虎虎,可能会更好,怎么来训练它呢?又该怎么来调整xyz,来保证它会产生更高的f。进行反向推逆法。将在输出1上计算梯度,这意味着希望它增加,希望f增加,这就是编码满意的方式,希望它增加1。
为了之后的传递,希望f增加1的事实,必须看看每个门上的梯度。什么是梯度?这是一个关于其输入的偏导数,门的输出相对于其输入的偏导数,这只是表示当稍微改变输入时,输出变化多少。如果为第一个加法函数增加x,这个变化的斜率是多少?f(x,y)等于x加y。如果稍微增加x,f会发生什么?如果稍微增加y,f会发生什么?取这些关于x和y的偏导数,会得到斜率1。当增加x时,f线性增加,y也是一样的,乘法则复杂一点。当增加x时,f随着y增加而增加,f对x的偏导数是y。f对y的偏导数是x。当改变x时,梯度的变化与x无关。它只和y有关,它翻转了。
2、Backpropagation: Backward Pass
所以可以反向传导那个1,让x满意的标志。这是通过计算局部梯度完成的。对于q,f相对于q的偏导数,即中间值。梯度会是-4,它会利用z的值,这是乘法门,它会利用z的值并将它的值分配给梯度,而f对于z的偏导数,也是一样的,它将分配给q,正推法时q的值,这里有正推法时的3,和-4用蓝色表示,在逆推法时-4和3,被翻转了,这是梯度。
3、Modular Magic: Chain Rule
So, instead of computing the gradient of this:
f(x,y,z)= (x十y)z
We compute the gradients of these:
Q=x+y
然后继续同样的过程,让这些起作用的是链式法则,它很神奇,它允许做的是计算样度。f相对于输入x,y,z的梯度,不需要分解构造,关于x,y和z的复杂方程f的偏导数,可以一步一步地反向传播梯度,可以将梯度相乘,而不是做f对于x的偏导数,只用中间的,f 对于 q,和 q 对于 y 的局部梯度,并把它们相乘,所以不需要计算,那个复杂的方程x加乘z的梯度,在这个练习中它并不是那么复杂,但是在神经网络中是特别复杂的,看第一个方程,简单的加法,q 等于 x 加 y,以及第二个方程,乘法,f等于q乘以z。x和y上的梯度,f相对于x和y的偏导数,是通过将可输出的梯度-4,乘上输入上的梯度,当操作是加法时就是1,所以等于-4乘以1,这意味着什么?来看看这些数字,现在有在x,y和z上的梯度,f关于x,y,z的偏导数,对x和y是-4,对于z是3,这意味着为了让f满意,需要减少,有负梯度的输入,并增加有正梯度的输入,x和y是负的,z是正的,多次提beautiful,这很简单,优雅的简单,因为梯度在局部工作,它为你传播,但对于更广泛的f的满意,它并不了解,计算输入和输出间的梯度,它可以传播这个梯度,基于在此例中f,梯度1,即误差,可以把输出的误差,而不是1,作为衡量满意的指标,可以反向传播那个误差,这些门是重要的,因为可以分解,在使用神经网络时,几乎所有能想到的操作,成一个或几个这样的门,最受欢迎的门有3个,是增加乘法,和最大化操作,对于加法,过程是通过网络做正推法,所以在每一个门上都有一个值,然后做逆推法,并通过逆推法,计算这些梯度,对于一个加门,将输出的梯度同等地分配到,到输入上,当输出的梯度是-4,而忽略了正推法的值,当做逆推法时,这个3被忽略,在乘法门上,交换正推法的值,如果看f,这是一个乘门正推法的值被交换,并与输出中的梯度相乘,这令人困惑慢慢跟着图片。
4、Interpreting Gradients
另一个门最大化门,这需要输入并输出,较大的值当计算最大化门的梯度时,它分配梯度,类似于加门,但只对一个输入,最大的一个,不像加门,它会注意输入,正推法的输入值。
5、Modularity Expanded:Sigmoid Activation Function
很多数字,但这里的重点是一个神经网络就是这些门的简单集合,做正推法,计算一些函数,梯度在最后面,将它传播回来,通常对于神经网络有一个误差函数,损失函数,目标函数,成本函数都是一个词这是Sigmoid函数,当有3个权重,w0,w1,w2,有两个输入x0,01,这是Sigmoid函数,这就是如何计算,神经元的输出,但是可以分解那个神经元。可以把它分开,只是像这样一系列的门,加门,乘门,还有指数门和除门,但都是类似的,重复完全相同的过程,有5个输入,3个权重,两个输入x0,x1。通过这个电路做正推法还是在这个例子中:想让它增加,所以输出的梯度是1,反向传播那个梯度,1到输入中,在神经网络中,有一堆参数,你尝试通过这个过程修改它们。你不能修改输入,你可以修改权重和偏置,输入是固定的,输出是固定的,希望网络输出的,在修改的是权重,所以会尝试在梯度的方向上。调整这些权重。
6、Learning with Backpropagation
Task: Update the weights and biases to decrease loss function
Subtasks:
(1)Forward pass to compute network output and "error "
(2)Backward pass to compute gradients
(3)A fraction of the weight's gradient is subtracted from the weight.
这是反向传播的任务,神经网络学习的主要方式,是更新权重和偏置,去减少损失函数,损失函数越低越好,在这个例子中,有左上方的三个输入,一个简单的网络,三个输入,每个输入都有三个权重,节点上有一个偏置,b 并且产生输出,a那个小符号表示一个 sigmoid 函数,损失,是用 y 减去 a 的平方,除以2来计算,y是基准数据,是想要网络产生的输出,而那个损失函数是通过反向传播的子任务,涉及到更新权重和偏置,是正向传递计算,每个神经元的网络输出,最后输出层,计算错误a和b的差值,向后传播梯度,输出上不是一,而是输出的误差,然后反向传播它,然后只要知道了梯度,调整权重和偏置,在梯度的方向上,实际上是与梯度的方向相反,因为想要损失减少,做出调整的数额,被称之为学习率,学习率可以在整个网络都是一样的,也可以每个权重都不同。
7、Learning is an Optimization Problem
这不调试权重和偏置的过程,就是最优化,学习就是一个优化问题,你有一个目标函数,试图最小化它,变量是参数,权重和偏置,神经网络碰巧有,十万,数百万的参数,尝试求最小值的函数是非线性的,但是归结为有两个权重,两个图,实际是一个权重,当你调整损失,调整的方式是最大限度地降低输出损失,有许多优化方法可以做到这一点。
Task: Update the weights and biases to decrease loss function
Use mini-batch or stochastic gradient descent.
这是一个凹函数,可以找到一个局部最小值,如果知道这些术语,局部最小值和全局最小值是一样的,没有奇怪的丘陵地形,会将你困住,目标是达到这个函数的底端,如果是一个很复杂的地形,会很难到达底部,这个方法是梯度下降,有很多不同的方法来做梯度下降,在过程中加入各种随机性,所以你不会陷入地形中的缝隙。
8、Optimization is Hard: Vanishing Gradients
但是它很复杂,要十分小心,这是要注意一部分,当在DeepTraffic上设计一个网络时,但没有什么效果,这可能是其中的原因,梯度消失或梯度爆炸,当偏导数很小时,如果用sigmoid函数,这是最流行的激活函数,当在底部的时候导函数为零,当sigmoid输入过高或者过低,导函数为0,梯度提醒要调整权重的程度,梯度可能为0,反向传播那个0,一个很小的数学,它会越来越小,当反向传播,结果就是,你认为不需要调整权重,当一大部分的网络,权重不需要被调整时,它们就不会调整权重,不会去做任何学习,所以学习效率会很低。
9、Optimization is Hard: Dying ReLUs
If a neuron is initialized poorly, it might not fire for entire training dataset.
Large parts of your network could be dead ReLUs!
对此有一些对策,有一些不同种类的函数,举个例子,relus 函数是最受欢迎的激活函数,但是同样如果神经元没有被很好地初始化,函数就不会被激活,整个数据集的梯度可能会变为0,没有产生任何输出,运行所有的猫的图像,一个都没有被激活,这就是要注意的地方所以一定要细心挑选。
10、Optimization is Hard: Saddle Point
优化机器,使用的求解器和激活函数,不能像乐高一样玩即插即用,要注意这些函数,SGD 随机梯度下降这是针对梯度下降的 vanilla 优化算法,用于优化梯度上的损失函数,这里显示的是如果做了任何数值优化和非线性优化,这就是著名的鞍点,对这些算法来说很棘手,会发生的是函数很容易摆动,在鞍点来回摆动,不是他们想做的,向不走,你会为发现了这个低点而开心,但是忘记了还有比它更低的点,所以被梯度困住了会不断地来回摆动,你没法到全局最小值有,许多巧妙的办法可以解决它,atom 优化器就是其中之一,但在这种情况下只要梯度不会消失,SGD 随机梯度下降,其中一个算法会帮到你,可能需要一点时间,但最终会帮到你。
问题:在处理一个非凹的函数,如何确保能收敛到足够好的地方?
局部最优收敛于,答案是你不能,这不只是个非线性的方程,而且是高度非线性的,神经网络的力量和美丽在于,它可以表示这些任意复杂函数的功能,这是难以置信的可以从数据中学习这些函数,人们把训练神经网络比作为艺术,是因为你试图处理参数,使它们不会陷入局部最优,无论出于何种原因,这个问题关键是在处理函数,但不知道全局最优在哪,这是问题所在,谈到的一切解释文字解释视频甚至是驾驶,驾驶的最优化是什么,永远不发生意外,你必须制定这个世界,这样它就定义了所有事情,而且它成为了非线性的目标函数,不知道最优是什么,因此要不断尝试,而且对它每次变得更好而印象深刻,基本上就是这个过程,也可以作些对比,和人的表现做对比。
11、Reflections on Backpropagation
(1)Pause to reflect: Backpropagation and gradient descent is the mechanism of machine intelligence. Can it lead to human-level reasoning" ?
(2)Some alternatives:
① Genetic Algorithms
② Particle Swarm Optimization
③ Ant Colony Optimization
(3)Q1: What other ways can we optimize
the weights of a neural network?
(4)Q2: What other ways can we optimize
(evolve) the design of the network?
对于imagenet人可以辨别出猫和狗而且概率最高的五个类别,达到96%的准确率,你会留下深刻的印象,当机器可以做的比这更好的时候,但你不知道最好是什么。










