1 #简单神经病网络 m-p 模型 2 #模型说明,对于输入矩阵 X = [x1 x2 ... xn], 有对应权重矩阵 W=[w1 w2 ... wn] W'=np.transpose(W) 3 #对于 f = f(X·W') ,给定阈值θ 4 # 当 X·W' > θ , f = 1, 5 # 当 X·W' < θ , f = 0, 6 import numpy as np 7 x = 10 * np.random.rand(5) #先随机生成 5 个 0--1 的种子,以后 *10,即种子大小为 0--10 8 print('x = ',x) 9 10 w = np.transpose(np.random.rand(5)) # w 为权重矩阵,先生成 1*5 矩阵,以后转置 11 print('w = ',w) 12 13 θ= 5 14 15 f1 = x.dot(w) - θ 16 17 print('x.dot(w) - θ = ',f1) 18 19 if f1 > 0: 20 f = 1 21 else: 22 f = 0 23 24 print('f = ',f)
与M-P模型类似,可是感知机模型初衷是为了完成数据分类的问题算法
感知机的数学表达式以下: f(x) = sign( w·x + b) 其中sign(x)为符号函数网络
化简后能够表示为dom
从几何意义上来看,二分类感知机可以将两类数据进行分类。函数
感知机的优势是很容易处理线性可分问题,缺点是不能处理异或问题,即非线性问题。于是出现了多层感知机来处理非线性问题。学习
多层感知机与感知机的区别在于,输入层和输出层之间加入了 n 个隐藏层 ( n >= 1),同时多层感知机具有了一种后向传播能力。优化
对于同一幅图片,好比下图:人工智能
目标识别:对于咱们输入的图像,计算机可以识别出咱们此处的皮卡丘并给他打上矩形框而且标上标签名spa
语义分割:而语义分割则更多的在于分割图像,它将图片中皮卡丘的轮廓描绘出而且与图片中的其余分隔开3d
监督学习:举个例子,如今有一堆苹果和一堆梨,须要计算机识别。监督学习就是开始的时候计算机不知道什么是苹果什么是梨,因而咱们拿一堆苹果和一堆梨去让计算机学习,多轮训练以后计算机已经可以分辨两者后,机器会造成本身的判断而且可以给以苹果和梨不一样的特征描绘。code
无监督学习:仍是上面的例子,初始时计算机也并不知道什么是苹果什么是梨,可是咱们也不给他训练让他本身判断,计算机根据两者的不一样点本身分类总结,而且优化每一次判断的参数,最后可以本身将苹果和梨分开。这更贴近咱们理解的“人工智能”。
二者利弊:
监督学习须要咱们花费大量时间和输入原始数据,可是获得的模型结果更符合咱们训练模型的初衷。
无监督学习可以本身寻找数据之间隐藏的特征和关系,更加具备创造性,有时能挖掘到意想不到的特性,可是最终的结果有不可控性,可能往坏的方向发展。
优势:对噪声不敏感
缺点:对已有数据的匹配性不好
改进措施:
优势:对已有数据匹配度很高
缺点:对噪声极度敏感
改进措施:
后向传播实质上就是函数映射结果对每一个参数求偏导,最后将偏导结果做为微调值。经过不断的微调使得模型的参数最优化。
例如 f = (x+y) * z 其中 x = 2 、y = 5 、z = 3 那么 f 对 x , y , z 的偏导分别为 三、三、7.
举一个更复杂网络的后向传播例子:
其中 x0 = 一、x1=一、b=-一、w0=0.五、w1=-0.5
则 x0 = 1的后向传播微调值为 f(x) 对 x0 的偏导0.125,x1 = 1的后向传播微调值为 f(x) 对 x1的偏导 0.125
损失用来度量模型的预测值和真实值之间的差距。损失越大,说明预测值和实际值误差大,模型预测不许确,反之亦然。
对模型优化的最终目的是尽量地在不过拟合的状况降低低损失值。
经常使用损失函数以下:
1.均方差偏差 Mean Square Error (MSE)
2.均方根偏差 Root Mean Square Error (RMSE)
3.平均绝对偏差 Mean Absolute Error (MAE)
经常使用优化函数以下:
全局梯度降低,训练样本总数为 n , j=0,1,...,n θ是学习速度,J(θ)是损失函数
学习速率用于控制梯度更新的快慢。若是学习速率过快,参数的更新跨度就会变大,极容易出现局部最优和抖动;若是学习速率过慢,梯度更新的迭代次数就会增长,参数优化所须要的时间也会变长。
全局梯度降低有一个很大的问题:模型的训练依赖于整个训练集,因此增长了计算损失值的时间成本和模型训练过程当中的复杂度,而参与训练的数据量越大,这个问题就越明显。
批量梯度降低就是将整个参与训练的数据集划分为若干个大小差很少的训练数据集,而后每次用一个批量的数据来对模型进行训练,并以这个批量计算获得的损失值为基准,来对模型中的所有参数进行梯度更新,默认这个批量只使用一次,直到全部批量全都使用完毕。
批量梯度降低的优势是计算损失函数的时间成本和模型训练的复杂度将会大大下降;可是缺点在于很容易致使优化函数的最终结果是局部最优解。
随机梯度降低是经过随机的方式,从整个参与训练的数据集中,选择一部分来参与模型的训练,因此只要咱们随机选取的数据集大小合适,就不用担忧计算损失函数的时间成本和模型训练的复杂度,并且与整个参预训练的数据集的大小没有关系。
随机梯度降低很好的提高了训练速度,可是会在模型的参数优化过程当中出现抖动的状况,缘由在于咱们选取参预训练的数据集是随机的,因此模型收到随即训练数据集中噪声数据的影响,又由于有随机的因素,因此也容易致使模型最终获得局部最优解。
Adam自适应时刻估计法是一种比较智能的优化函数方法,它经过让每一个参数得到自适应的学习率,来达到优化质量和速度的双重提高。
For instance,一开始进行模型参数训练的时候,损失值比较大,则此时须要使用较大的学习速率让模型参数进行较大的梯度更新,可是到了后期咱们的损失值已经趋向于最小了,这时就须要使用较小的学习速率吧来让模型参数进行较小的参数更新。。
Adam学习速率好、收敛速率快,是一种比较好的优化函数。
激活函数相似一个递归定义,假如激活函数是取输入值和 0 比较的最大值,那么,对于单层神经网络, f(x) = max(W·X + b , 0),那么一样的,对于双层神经网络,f(x) = max(W2·max(W1·X + b1 , 0)+b2,0)
所以咱们能够看出,若是不引入激活函数,那么无论咱们有多少层神经网络,最后的输出都同样会是一个线性函数,而引入激活函数使得咱们的模型有了非线性因素。
经常使用的非线性激活函数以下:
Sigmoid函数的激活输出过程与生物神经网络工做机理十分类似,可是Sigmoid做为激活函数的缺点在于会致使模型的梯度消失,由于SigMoid的导数取值区间为[0,0.25]。根据链式法则,若是每层神经网络的输出节点都用Sigmoid做为激活函数,则每一层都要乘一次Sigmoid的导数值,即使每次都乘以最大的0.25,模型到了必定深度,梯度仍是会消失。
其次Sigmoid函数值恒大于0,使得模型在优化的过程当中收敛速度变慢。由于深度神经网络模型的训练和参数优化每每须要消耗大量的时间,因此会致使时间成本太高。所以计算数据时,尽可能使用零中新数据,也要尽可能保证计算获得的输出结果是零中心数据。
tanh的输出结果是零中心数据,因此解决了模型优化过程当中收敛速度变慢的问题。可是tanh的导数取值范围是0~1,仍然不够大,所以后向传播的过程当中,仍然会出现梯度消失的状况。
ReLU,修正线性单元,是目前在深度神经网络模型中使用率最高的激活函数,他的收敛速度很是快,其计算效率远远高于Sigmoid和tanh,可是ReLU也存在着输出不是零中心数据的问题,这可能致使某些神经元永远得不到激活,而且这些神经元的参数永远得不到更新。这通常是因为模型参数在初始化时使用了全正或全负的值,或者在后向传播过程当中设置的学习速率太快而致使.解决办法能够是对模型使用更高级的初始化方法好比Xavier,以及设置合理的后向传播学习速率,推荐使用自适应的算法如Adam。
ReLU也在被不断地改进,如今已经有不少ReLU的改进版本,例如Leaky-ReLU、R-ReLU等。
CPU(Central Processing Unit,中央处理器)与GPU(Graphics Processing Unit图像处理器)用处不一样。CPU是一台计算机的处理核心,主要负责计算机的控制命令处理和核心运算输出,GPU是一台主机的现实处理核心,主要负责对计算机中的图形和图像的处理与运算。差别主要以下:
天天进步一小点,加油!共勉