目录
1.知道什么是深度学习
深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。是机器学习得分支,是一种以人工神经网络为架构,对数据进行特征学习的算法。
2.机器学习和深度学习的区别
深度学习 | 机器学习 | |
提取过程 | 自动的进行特征抽取 | 人工的特征抽取过程 |
数据量 | 数据少,效果不是特别好 | 数据多,效果不是特别好 |
3.深度学习的应用场景
a).图像处理:物体识别、场景识别、人物检测跟踪、人物身份认证。
b).自然语言处理技术:机器翻译、文本识别、聊天对话。
c).语言技术:语音技术。
4.常见的深度学习框架
目前企业中常见的学习框架有很多,TensorFlow,Caffe2,Keras,Theano,Pytorch,Chainer,DyNet,MXNet,and CNTK等等
5.为什么要学习Pytorch框架
TensorFlow | Pytorch | |
由不同的向导创建的 | Tensorflow 基于 Theano,由 Google 开发 | PyTorch 基于 Torch,由 Facebook 开发 |
这些框架定义计算图的方式 | 在 Tensorflow 中,必须定义模型的整个计算图,然后运行您的 ML 模型,也就是说在TensorFlow中是静态图机制。 虽然Tensorflow 2.0已经引入了动态图机制Eager模式 | 在 PyTorch 中,可以随时随地定义/操作您的图形,也就是说是 动态图机制 。这在 RNN 中使用可变长度输入时比较有用。 |
学习难易程度 | Tensorflow 的学习曲线比 PyTorch 更难一点,怎么说?PyTorch更符合Python和建设ML车型感觉更直观一些。另一方面,使用 Tensorflow的话,必须更多地了解它的工作原理(会话、占位符等)。 | PyTorch更符合Python和建设ML车型感觉更直观一些。 |
工具差别 | TensorFlow中的TensorBoard 可以直接在浏览器中可视化 ML 模型。 | PyTorch 没有TensorBoard这样的工具,尽管可以使用像 Matplotlib 这样的工具。 |
所以对于初学者直接以Pytorch为切入点,它整体来讲API较为清晰,文档较为清晰,比TensorFlow更接近于Python,调试也比较好调试,尤其是当你引用API的时候,Pytorch的API是一个框架下来的,他不会有很多混杂的地方。而TensorFlow里面有1.x API 2.x API Keras API,有时一个功能需要三个API。等到将Pytorch学完之后可以在学习TensorFlow。
5.神经网络的介绍:
1).概念:
全名为人工神经网络(Artificial Neural Network),缩写为:ANN,简称为神经网络,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型,用于对函数进行估计或近似。
和其他机器学习方法一样,神经网络已经被用于解决各种各样的问题,例如,机器学习和语音识别。这些问题都是很难被传统基于规则的编程所解决的。
2).神经元
a)这里的神经元指的是人工神经网络中的神经元。神经元是一种处理单元,是对人脑组织的神经元的某种抽象、简化和模拟。是人工神经网络的关键部分。通过神经元,人工神经网络可以以数学模型模拟人脑神经元活动,继而进行高效的计算以及其他处理。2)
应用到计算机中,有一些输入,然后给一个输出。应用到数学中,在数学上,在机器学习中的神经元就是一个数学函数的占位符,它仅有的工作就是对输入使用一个函数,然后给一个输出。
b)神经元与神经元之间的连接
神经元与其它神经元之间的连接具有权重,也就是说,它可以和前一层神经网络层中的所有神经元有连接。每一个连接都有各自的权重,通常情况下是一些随机值。这个权重可以是负值,正值,非常小,或者非常大,也可以是零。和这个神经元连接的所有神经元的值都会乘以各自对应的权重。然后,把这些值都求和。
c)偏差bias(一般简称为b)
用来避免输出为零的情况,并且能够加速某些操作,这让解决某个问题所需要的神经元数量也有所减少。这个bias也是一个数字,有些时候是一个常量(经常是-1或者1),例如上面的图中的+1,有些时候会有所变化。这个总和最终被输入到一个激活函数,这个激活函数的输出最终就成为这个神经元的输出。
a1,a2……an为各个输入的分量,v1,v2…vn为各个输入分量对应的权重,b为偏置项,f为激活函数(非线性传递函数),t为神经元的输出(一般为标量)。
3).单层神经网络(感知器)
在“感知器”中,有两个层次。分别是输入层和输出层。输入层里的“输入单元”只负责传输数据,不做计算。输出层里的“输出单元”则需要对前面一层的输入进行计算。
4).两层神经网络(多层感知器)
两层神经网络除了包含一个输入层,一个输出层以外,还增加了一个中间层。此时,中间层和输出层都是计算层。我们扩展上节的单层神经网络,在右边新加一个层次(只含有一个节点),在两层神经网络中,我们不再使用sgn函数作为函数g,而是使用平滑函数sigmoid作为函数g。我们把函数g也称作激活函数(active function)。
5).多层神经网络(深度学习)
与两层层神经网络不同。多层神经网络中的层数增加了很多。
增加更多的层次有什么好处?更深入的表示特征,以及更强的函数模拟能力。
更深入的表示特征可以这样理解,随着网络的层数增加,每一层对于前一层次的抽象表示更深入。在神经网络中,每一层神经元学习到的是前一层神经元值的更抽象的表示。例如第一个隐藏层学习到的是“边缘”的特征,第二个隐藏层学习到的是由“边缘”组成的“形状”的特征,第三个隐藏层学习到的是由“形状”组成的“图案”的特征,最后的隐藏层学习到的是由“图案”组成的“目标”的特征。通过抽取更抽象的特征来对事物进行区分,从而获得更好的区分与分类能力。
6.激活函数
1)什么是激活函数?
激活函数(Activation functions)对于人工神经网络 [1] 模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。它们将非线性特性引入到我们的网络中。如图1,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。
2)为什么要使用激活函数?
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。
如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
3).五种常见的激活函数
函数 | 表达式 | 图像 | 适用处或优点 | 缺点 |
Softmax | Softmax 是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为 K 的任意实向量,Softmax 可以将其压缩为长度为 K,值在(0,1)范围内,并且向量中元素的总和为 1 的实向量。 Softmax 与正常的 max 函数不同:max 函数仅输出最大值,但 Softmax 确保较小的值具有较小的概率,并且不会直接丢弃。我们可以认为它是 argmax 函数的概率版本或「soft」版本。 Softmax 函数的分母结合了原始输出值的所有因子,这意味着 Softmax 函数获得的各种概率彼此相关。 |
| ||
ReLU | ReLU 函数是深度学习中较为流行的一种激活函数,相比于 sigmoid 函数和 tanh 函数,它具有如下优点:
|
| ||
Leaky ReLU | Leaky ReLU 通过把 x 的非常小的线性分量给予负输入(0.01x)来调整负值的零梯度(zero gradients)问题;
| 从理论上讲,Leaky ReLU 具有 ReLU 的所有优点,而且 Dead ReLU 不会有任何问题,但在实际操作中,尚未完全证明 Leaky ReLU 总是比 ReLU 更好。 | ||
Tanh | tanh 是一个双曲正切函数。tanh 函数和 sigmoid 函数的曲线相对相似。但是它比 sigmoid 函数更有一些优势。 首先,当输入较大或较小时,输出几乎是平滑的并且梯度较小,这不利于权重更新。二者的区别在于输出间隔,tanh 的输出间隔为 1,并且整个函数以 0 为中心,比 sigmoid 函数更好;
| 在一般的二元分类问题中,tanh 函数用于隐藏层,而 sigmoid 函数用于输出层,但这并不是固定的,需要根据特定问题进行调整。 | ||
Sigmoid |
|
|