这里在进入人工智能的讲解以前,你必须知道几个名词,其实也就是要简单了解一下人工智能的数学基础,否则就真的没办法往下讲了。网络
本节目录以下:函数
人工智能能够归结于一句话:针对特定的任务,找出合适的数学表达式,而后一直优化表达式,直到这个表达式能够用来预测将来。学习
接下来就来一句一句的分析这句话:优化
首先咱们须要知道的是,人工智能其实就是为了让计算机看起来像人同样智能,为何这么说呢?举一我的工智能的例子:人工智能
咱们人看到一个动物的图片,就能够马上知道这个动物是猫,仍是狗。可是计算机却不能够,若是计算机能够分出类别,那么这就会是一个具备图像分类功能的人工智能小例子。code
这里的图像分类
就是咱们所说的特定任务,这就是咱们但愿写出一我的工智能的程序来作的事情。图片
还有一些其余的常见的任务:人脸识别
,目标检测
,图像分割
,天然语言处理
等等。深度学习
学太高等数学而且有计算机思惟的人都知道,世界中几乎全部的事情均可以用数学函数来表达出来,咱们先无论这个数学表达式是离散仍是连续,也无论他的次数多高,反正他能达到表示特定任务的一种目的。数学
好比说,针对一个西瓜质量好坏的预测任务,能够设出如下的表达式:入门
解释以下:
一、
x1,x2,x3
能够看做判断西瓜好坏的判断依据,好比能够是:瓜皮纹路,敲击声音,瓜皮颜色等等。二、
a,b,c,d
就是这个表达式的系数,一旦数学表达式定下来了,那么接下来须要作的事情就是找出合适的系数,使得这个表达式能够很好的判断出西瓜质量的好坏。
因此,针对上文提到的特定任务,均可以用数学表达式表示出来,固然,咱们会尽量找简单、高效的表达式。
上边引出表达式以后,会发现当表达式肯定下来以后,就要寻找合适的系数了,寻找系数的过程就被称之为训练网络的过程。
咱们优化表达式的重要思想是:一直调整系数值,使得预测出的数据 与 真实数据之间的差距尽量的最小。
好比:假设预测的数据是 f1(x)
,真实数据是y
,咱们经过一直改变系数的值,来找出可使得预测数据与真实数据之间距离最小的一组,最小的一组数据就是咱们须要的系数。
其中,距离计算公式能够是以下的表达式:
经过这个表达式,获得的 loss
值就是真实值与预测值之间的距离。
而后,接下来的优化就是针对这个loss
表达式来进行的,目的就是让loss
的值达到最小。
由于loss
值达到最小的时候,就意味着咱们的预测值与真实值距离很相近,预测越准确。
这里值得一提的是,这里的
loss
表达式的优化过程,其实就是将loss
公式对函数f(x)
的系数求导。因此当
loss
最小的时候,就意味着此时的系数最合适。具体的细节往下看。
通过上边的优化,此时函数会获得一个相对好一点的系数,而后就可使用这个函数来预测将来的事情了。
这就是达到了人工只能的目的了。
因此,下边咱们就要仔细讨论,数学表达式的构建,距离函数的构建,距离的优化。
神经网络的英文是:neural network (简称:NN)。
神经网络其实就是变形的数学表达式,它经过拼装基础组件(神经元)来模拟出数学表达式。
一说神经网络,你们首先想到的就是神经元,其实没错,神经网络这个名词就是从神经元这里演变过来的。因此咱们作一下类比。
如图所示,这个图就是咱们人体的神经元的放大图。
一般咱们身体的 A
部位发出的命令,要指挥 B
部位响应,就要经过 A
向 B
发出信号。这个信号的强弱影响着 B
反应的强弱。
因此,这就是神经网络的构思所在:
构建出一个相似于神经元的结构,上一个节点的输入(A处的控制) 以及权重(信号的强弱)共同决定下一个节点的输出(B处的反应)。
这句话,如今看不懂不要紧,有个印象就好,继续往下看吧。
如图所示就是一个最简单的神经网络结构,这个结构的数学表达式是:
图中的圆圈咱们就把他类比于神经元,图中的各个结构解释以下:
其中 X1,X2
就是这个神经网络的输入,他至关于就是人体大脑发出的控制命令。
W1,W2
就是权重,他是用来控制不一样输入信号占比大小的数据,好比:想让控制X1
做用明显一点,那么对应的W1
就大一点。
Y
就是输出,他就是输入数据与权重做用以后的最终结果,在神经元中也就是最终对身体某个部位的控制信号。
神经网络的数学原理很是简单,简单总结下来就是一句话:不一样的输入做用于各自的权重以后的和即为咱们须要的结果。
其实就能够大体理解为咱们的函数 :
f(x) = a*x1 + b*x2
同样,所谓的权重就是咱们方程的系数。
细心的人观察上边的公式就会发现,一个神经元节点就能够归结于一个运算式子。因此咱们这里就来针对上图,分析分析含有一个神经元节点的公式。
从图中能够看得出来,最终的输出结果 Y
是由 输入(X)
以及 权重(W)
共同决定的。
他们最终的计算结果 Y
其实说白了就是一个计算公式:Y = X1*W1 + X2*W2
,这个公式的含义你们应该都明白,给不一样的输入 分配不一样的权重 ,从而获得想要的结果。
这就是神经网络中一个神经元的数学原理,当把神经元的个数增多以后,原理以此类推,只不过是要增长权重W
以及输入X
的个数而已。
下边就能够看做是一个,含有两层的神经网络结构。
第一层节点: 11
,12
,13
。第二层节点: 21
。
输入: X1
,X2
。 输出 : Y
。
因而,根据公式:输出 等于 输入做用于 权重, 得出如下推导 :
X1
,X2
。11
的值: 12
的值: 13
的值: 21
的值就是最终输出 Y
: 因此,最终的整合式子为:
因而,咱们能够发现,相似于这样的堆叠方式,咱们能够组合成不少的数学函数。
这就是神经网络,他的目的在于将数学公式堆砌出来,至于为何要这样堆砌,是由于这样堆砌计算机计算比较方便呗。
到目前为止你已经知道了神经网络的由来,而且知道神经网络与数学公式之间的关系。
此时你须要明确的知识点是:
这个知识点比较简单,就一些单纯的概念。
监督学习:就是咱们收集到的数据是有标签的。
就是说,咱们收集到的数据是已经分好类的。
好比说:当前当前有一批样本数据,
x1, x2, x6, x9, x13
属于类别y1
类。x3, x4, x5, x8, x11
属于类别y2
类。x7, x10, x12
属于类别y3
类。
而后接下来咱们使用这些数据的时候,就可使用已有标签的数据,去拟合出曲线,用以预测将来。
无监督学习:咱们收集到的数据是无标签的。
就是说,收集到的数据并无固定的类别,咱们须要作的事情就是挖掘数据内部的联系,给他们聚类,找出类别。
如图所示,挖掘出数据内部的联系,让他自动归类。
上边解释过了,损失函数的做用就是计算 真实值 与 预测值 之间距离的 (距离其实能够简单理解为两个数据之间的差距)。
这里介绍一些常见的几种损失函数,以供你们入门使用。
这里给定一些大前提,下边的几种损失函数通用的那种。
y
,他就是针对某一组输入x
的真实标签。f(x)
,他就是针对输入x
的预测标签。m
,他就是咱们每次输入多少样本进行计算,好比:某一次输入5
组x
,获得5
个预测结果,这里的m=5
.其实就是简单的计算 真实值 与 预测值 之间的绝对值距离而已。
公式:
解释:
J(y,f(x))
的意思就是,这个损失函数的参数是:真是标签y
与 预测数据f(x)
。J(w,b)
的意思是,这个损失函数的目的是优化参数 w
与 b
。这里的w
,b
其实就是系数的矩阵形式。m
个样本,计算出这m
个样本的距离绝对值和,而后再求均值。就是将上边式子的绝对值换成平方就行了。
公式:
解释:
m
换成了除以2m
。这个就比较麻烦了,交叉熵损失函数通常用于解决分类问题。
标签:
在一般的分类问题中,标签y
的取值通常只有 0
或 1
。
1 表示是当前类别, 0 表示不是当前类别。
公式:
解释:
y
与 f(x)
都只能取 1
与 0
中的一种可能性。因此,上述公式的效果就是:你带入
y=1 , f(x)=1
试试就知道了。
你带入
y=1 , f(x)=0
试试就知道了。
到这里你已经学习了三种常见的损失函数。
此时你应该有一个明确的知识点就是:
好了好了,上边过完理论知识,这里来一个真真正正的数学内容了,其实不难,看我慢慢分析。
咱们知道了损失函数就是衡量预测值与真实值之间距离的公式。
而且知道,损失函数的值越小,真实值和预测值之间的距离越小,也即:预测的越准。
也就是没有告诉你们怎么使得损失函数的值愈来愈小。
其实,这里使用的数学知识就是 :求偏导
这里以一个简单的数学例子来引入梯度降低的内容。
在数学课中咱们常常作的一个题型就是:已知一个函数
f(x)
的表达式,如何求出这个式子的最小值点。
在数学题中咱们常常用的方法就是:将函数f(x)
对x
求导,而后令导数式子为0
,求出此时的x
的值,即为最小值点的位置。
求函数
的最小值点,而且求出最小值。
对函数求导
令导函数为0,求出此时的x
此时,x = 3
即为函数 f(x)
的最小值点,带入原方程 f(3)= 2*9-12*3+20 = 2
.
这个解题过程,想必你们都很熟悉吧。
下边就分析一下这个过程的数学原理了
梯度就是导数。
针对上边提到的方程的最小值求解,其实就是求出其梯度(导数)为0
的位置,就是其最低点的位置。具体看下图:
从图中能够看出,方程在不一样位置的导数方向是不一样的,只有在最低点的位置,导数为
0
,因此能够用导数为0
的位置求出最低点。
上边举的例子是一个比较简单的例子,方程中只有一个未知数,可是在真实状况中,每每一个方程有不少未知数。
此时须要作的事情就是针对每个变量求偏导,求出该方程针对每一个变量的梯度方向 (梯度方向就是数据变小的方向)。
因而,在方程的每一个点上,都有多个梯度方向,最终将这多个方向合并,造成这个点的最终梯度方向 (数据变小的方向)
如图,方程有两个变量
x
,y
,因而在A点针对两个变量求偏导就能够获得各自的梯度方向(两个红色箭头的方向)。而后,将两个梯度进行合并,获得最终的梯度方向
Z
。Z方向就是方程在A点数据变小的方向了。
上边讲完原理,这里就举出一个例子,带着你们走一遍梯度降低找最小值的过程。
假设此时的方程已知,而且根据方程绘制出的图像以下。
一、在A点处针对方程的各个变量求出偏导,因而即可以获得方程针对各个方向的梯度方向。
二、将A点处各个方向的梯度方向进行合并,造成最终的梯度方向。
三、最终的梯度方向就是AB方向。
四、因而向着AB方向走出一段距离,走到了B点。
一、求出B点处各个方向的梯度方向,而后合并全部梯度方向,获得最终的B点处梯度方向 BC。
二、因而沿着BC方向,走出一段距离,到达C点。
到达某个点以后,求出各方向的偏导数,而后合并获得最终的梯度方向。
而后沿着合并后的梯度方向走出一段距离到达下一个点。
而后在一直重复......
K点就是最终的点,这就是优化获得的最重点。
这就是整个找最小点的可视化过程,可是其中提到更新的数学细节并无提到,因此下边提一下用到的数学更新公式吧
通常咱们梯度降低更新的数据只有函数的系数,而后函数的系数能够分为两类:权重(W)+ 误差(b)
因此,更新的时候也就针对这两个参数就行了。
变量定义:
W
: 方程的权重。 (能够简单理解为方程变量前面的系数)b
:方程的误差。 (能够简单理解为方程中的常数)好比:
中,
2 , 1
就是权重,3
就是误差。
公式:
W
:原始点的权重是
,原始点此时针对
W
的梯度方向是.
α
就是一段距离长度(它就是咱们上文一直提到的走一段距离)。因此
表达的含义就是沿着
W
的梯度走一段长度为α
的距离。而后 新的
W
就是 旧的W
减去那一段方向长度。
原理同
W
.
这就是更新参数的整个梯度降低过程了。
到目前为止,基础的人工智能知识已经基本讲完了,这个时候咱们再来仔细品味这句话。
针对特定的任务,找出合适的数学表达式,而后一直优化表达式,直到这个表达式能够用来预测将来。
或许你就会有不同的体会了。
ok,下一节就讲一讲Pytorch的基础使用,而后就是最终的手写体数字识别任务了。