目录算法
前言数据库
目标: 掌握神经网络的基本概念, 学习如何创建神经网络(包含一个深度神经网络),以及如何在数据上面训练他们,最后将用一个深度神经网络进行辨认猫。性能
(1)了解深度学习的概念学习
(2)了解神经网络的结构,使用算法并高效地实现优化
(3)结合神经网络的算法实现框架,编写实现一个隐藏层神经网络spa
(4)创建一个深层的神经网络(通常把层数大于等于3的神经网络称为深层神经网络)
Deep Learning:
改变(应用):网络搜索和广告推荐
很好的示例:读取X光图像、精准化农业、自动驾驶等
突破:计算机视觉(图像识别),语音识别(机器翻译)
观点: 认为AI是最新的电力,大约在一百年前,咱们社会的电气化改变了每一个主要行业,从交通运输行业到制造业、医疗保健、通信等方面,我认为现在咱们见到了AI明显的使人惊讶的能量,带来了一样巨大的转变。
什么是神经网络?
个人初步理解:给定原始输入数据,按照特定的计算规则传递给神经元,后续通过相应的计算规则继续传递给下一层神经元,当到达最后一层时,获得的神经元中存储的数据即为须要输出的数据。
简单描述: 尝试输入一个x,便可把它映射成y。
例如,课程中给的关于预测房屋价格的神经网络示例,以下图:
区分结构化数据和非结构化数据:
结构化数据: 数据的基本数据库, 例如在房价预测中,你可能有一个数据库,有专门的几列数据告诉你卧室的大小和数量,这就是结构化数据。
非结构化数据: 如音频,原始音频或者你想要识别的图像或文本中的内容。
什么是监督学习?
个人理解:给定大量得输入数据,以及对应得输出结果标记数据。来训练神经网络获得中间计算出对应输出结果的模型函数。成功获得该模型后,后续就可使用该模型来预测新的输入数据的预测结果,从而获得实际价值。
简单描述:监督式学习的目标是在给定一个 (x, g(x))的集合下,去找一个函数g。
深度学习兴起条件:
对于本周学习的内容,须要着重理解一下几个概念及背后的实现原理:
梯度降低:
在逻辑回归算法第三步中须要使用梯度降低法,来求取代价函数J(w, b)的最小值。
梯度降低一个简单暴力的理解:在一个函数图像中沿着函数值不断减少的梯度方向降低(向下走)叫梯度降低。此处可见参考资料[1]
如今问题是要求取J(w, b)的最小值,能够看下面一个形象化的图像:
在这个图中,横轴表示你的空间参数w和b。要求J(w, b)最小值,即要求取图中曲面最低部的一点处的值即为最佳值。能够看出大小是按照梯度不断降低的方式变化。
对参数w的梯度降低更新公式(其中a是学习率,用来控制步长。:=表示更新参数):
对参数b的梯度降低更新公式:
逻辑回归算法:
该算法分为三部分,分别是预测函数部分、损失函数、梯度降低法求取代价函数的最小值。此处可见参考资料[2]
首先说一下预测函数:
给定输入数据x,传递过程当中的特征权重w和误差b,计算最终的输出预测值y,这就是预测函数须要作的事情。
通常状况下,z = wx + b,你会发现函数z是一个线性函数,并且z值得大小依据x的取值大小而不断变化,不能给神经网络的最终预测结构提供帮助。
例如,识别一张猫的图片,最终的预测结果只有两种:不是,是。所以,咱们能够相似处理,把最终输出的预测值y变为0和1两种,0表示是,1表示不是。
那么如何让z转化为最终的预测值y呢?
此处能够选择采用具备二分特性的sigmoid函数,sigmoid函数图像以下:
能够看出sigmoid函数的取值区间为(0,1),当x趋近正无穷大时,值趋近1,当x趋近负无穷大时,值趋近0。
那么咱们能够把z值看成参数传递给sigmoid函数,若是sigmoid(z) >= 0.5就令y = 1, 不然令y = 0。
可是,逻辑回归作的处理是给出最终的估计值sigmoid(z),具体y的值大小是神经网络最后一步的最终输出结果。(PS:注意预处理函数此处给出的示例是sigmoid函数,对应其余状况须要选择其余合适的预处理函数)通常把y^ = o(z)(PS:这里是使用有y^表示数学字符y帽,o表示预处理函数)
总结,预测函数计算步骤:
z = wx + b, y^ = o(z),其中o是预处理函数。
损失函数:
损失函数又叫作偏差函数,用来衡量算法的运行状况,Loss function:L(y^, y).
咱们经过这个L称为的损失函数,来衡量预测输出值和实际值有多接近。通常咱们用预测值和实际值的平方差或者它们平方差的一半,可是一般在逻辑回归中咱们不这么作,由于当咱们在学习逻辑回归参数的时候,会发现咱们的优化目标不是凸优化,只能找到多个局部最优值,梯度降低法极可能找不到全局最优值,虽然平方差是一个不错的损失函数,可是咱们在逻辑回归模型中会定义另一个损失函数。
咱们在逻辑回归中用到的损失函数是:
代价函数:
为了衡量算法在所有训练样本上的表现如何,咱们须要定义一个算法的代价函数,算法的代价函数是对m个样本的损失函数求和而后除以m:
损失函数只适用于像这样的单个训练样本,而代价函数是参数的总代价,因此在训练逻辑回归模型时候,咱们须要找到合适的w和b,来让代价函数J 的总代价降到最低。
最后,看几处课程中比较重要的几张图:
单个样本逻辑回归梯度降低计算过程:
多个样本逻辑回归梯度降低计算过程:
基于逻辑回归重复使用了两次及以上该模型就可获得神经网络,例以下图:
用圆圈表示神经网络的计算单元,逻辑回归的计算有两个步骤,具体以下图:
常见的激活函数:
为何须要非线性激活函数?
若是你使用线性激活函数或者没有使用一个激活函数,那么不管你的神经网络有多少层一直在作的只是计算线性函数,因此不如直接去掉所有隐藏层。(PS: 若是你是用线性激活函数或者叫恒等激励函数,那么神经网络只是把输入线性组合再输出。)
总而言之,不能在隐藏层用线性激活函数。 惟一能够用线性激活函数的一般就是输出层;除了这种状况,会在隐层用线性函数的,除了一些特殊状况,好比与压缩有关的,那方面在这里将不深刻讨论。在这以外,在隐层使用线性激活函数很是少见。
当你训练神经网络时,权重随机初始化是很重要的。对于逻辑回归,把权重初始化为0固然也是能够的。可是对于一个神经网络,若是你把权重或者参数都初始化为0,那么梯度降低将不会起做用。
若是你要初始化成0,因为全部的隐含单元都是对称的,不管你运行梯度降低多久,他们一直计算一样的函数。这没有任何帮助,由于你想要两个不一样的隐含单元计算不一样的函数,这个问题的解决方法就是随机初始化参数。
有一个隐藏层的神经网络,就是一个两层神经网络。记住当咱们算神经网络的层数时,咱们不算输入层,咱们只算隐藏层和输出层。
在作深度神经网络的反向传播时,必定要确认全部的矩阵维数是先后一致的,能够大大提升代码经过率。
为何使用深层表示?
深度神经网络的这许多隐藏层中,较早的前几层能学习一些低层次的简单特征,等到后几层,就能把简单的特征结合起来,去探测更加复杂的东西。好比你录在音频里的单词、词组或是句子,而后就能运行语音识别了。同时咱们所计算的以前的几层,也就是相对简单的输入函数,好比图像单元的边缘什么的。到网络中的深层时,你实际上就能作不少复杂的事,好比探测面部或是探测单词、短语或是句子。
想要你的深度神经网络起很好的效果,你还须要规划好你的参数以及超参数。
什么是超参数?
好比算法中的learning rate a(学习率)、iterations(梯度降低法循环的数量)、L(隐藏层数目)、n[l](隐藏层单元数目)、choice of activation function(激活函数的选择)都须要你来设置,这些数字实际上控制了最后的参数W和b的值,因此它们被称做超参数。
参考资料: