机器学习——神经网络(neural networks)

1.认识神经网络

激活,指的是神经元向其下游的其他神经元发送高输出值或许多电脉冲的程度,影响因素是激活项。

输入四个数字,然后神经网络的这一层使用这四个数字来计算新的数字(3个),这些新的数字也被称为激活值。

机器学习——神经网络(neural networks)_第1张图片
多层的神经网络被称为多层感知器

2.神经网络在计算机视觉中的应用

机器学习——神经网络(neural networks)_第2张图片

【在第一个隐藏层中】

第一个神经元在寻找像第一个像素里这样的垂直线边缘。
第二个神经元在寻找一条像这样的有方向的线或有方向的边。

第三个神经元在这个方向上寻找一条线
神经网络的最初几层,神经元在图像中寻找非常短的线条或非常短的边缘

【在第二个隐藏层中】

这些神经元聚在了一起形成很多短小的线条和短小的边缘段,好寻找脸的一部分

【在第三个隐藏层中】

神经网络将人脸的不同部分聚合在一起,检测图像中是否存在粗粒度更大的面部轮廓,最后检测这张脸与不同面部轮廓的符合程度,创建出一组丰富的特征,然后帮助输出层确定人物图片的身份。
神经网络的一个显著特点是,你可以自己学习这些不同隐藏层的特征检测器

第一个隐藏层的神经元用相对较小的窗口来寻找这些边缘,第二个隐藏层是用大点的窗口(在图像的搜寻范围更大),第三个隐藏层用的窗口还要更大,这些经过可视化后的小神经元,实际上对应于图像中不同大小的区域。

3.一层神经元

这四个数字分别输入到三个神经元中,这三个神经元中的每个都在执行个小小的逻辑回归单元
第一个神经元的激活值a1,这是三个数构成的向量变成了激活值a的向量,然后传递给该神经网络的最终输出层。

机器学习——神经网络(neural networks)_第3张图片
[1]表示层的索引,输出的是激活向量作为第二层的输入,第2层的输入是第1层的输出

机器学习——神经网络(neural networks)_第4张图片

【神经网络的工作原理】每一层输入一个数字向量,应用一堆逻辑回归单元,然后计算另一个向量,然后一层接着一层。

4.更复杂的神经网络

机器学习——神经网络(neural networks)_第5张图片
使用传统的网络计算层数的方法,不算输入层,共四层
机器学习——神经网络(neural networks)_第6张图片
函数g(w,b)是激活函数,激活函数就是能够输出这些激活值的函数

5.前向传播

计算a1

机器学习——神经网络(neural networks)_第7张图片
25个神经元25个单元,15个神经元15个单元

计算a2
机器学习——神经网络(neural networks)_第8张图片
计算a3 

机器学习——神经网络(neural networks)_第9张图片

因为要传播神经元的激活值,所以从左到右的过程称为前向传播forward propagation

6.基于TensorFlow的推理模型

将x设为含有两个数据的二维数组,输入是200摄氏度和17分钟
第一层得到一个包含三个数字的列表,因为第一层有三个单元

机器学习——神经网络(neural networks)_第10张图片

【手写数字分类问题】 

在本例中,x是一个含有像素强度值的列表,所以x等于包含此像素强度值的一个numpy数组,然后进行初始化,并进行向前传播
机器学习——神经网络(neural networks)_第11张图片

7.TensorFlow数据处理

在TensorFlow中NumPy是如何表示数据的,数据用NumPy和TensorFlow的表示之间存在一 些不致
在numpy中

机器学习——神经网络(neural networks)_第12张图片

线性回归和逻辑回归中,我们用一维向量来表示输入特征x,对于TensorFlow惯例是使用矩阵来表示数据。因为TensorFlow是被设计用来处理非常大的数据集的,这些数据集用矩阵而不是一维数组来表示,它让TensorFlow内部计算更加高效。
机器学习——神经网络(neural networks)_第13张图片输出,dtype=float32表示用十进制表示占用电脑里的32比特内存,这是浮点数32的位置。tensor(张量)是TensorFlow团队创建的一种数据类型,可以有效地存储和执行矩阵计算,可以把张量理解为是表示矩阵的一种方式

将张量转换为numpy数组,它会获取相同的数据并以NumPy数组的形式返回

【第二层的激活输出】

8.在tensorflow中构建神经网络

机器学习——神经网络(neural networks)_第14张图片

fit 函数拟合,即告诉tensorflow采用这个神经网络通过将layer 1和layer 2顺序连接在一起,然后用数据x,y训练它
建立一个神经网络密集流
机器学习——神经网络(neural networks)_第15张图片

9.从头实现前向传播(只利用python和numpy库实现前向传播)

在单个层中实现前向传播
机器学习——神经网络(neural networks)_第16张图片
【通用的前向传播实现】Python中更通用的forward prop实现方法,简化代码以实现更通用的神经网络,而不是硬编码每个神经元
实现全连接层(fully connected)的代码
这是神经网络的一层,定义一个dense函数,它的输入有:前一层的激活、表示某层的神经元的参数w和b
如果第一层有三个神经元,然后w1,w2,w3是这些
机器学习——神经网络(neural networks)_第17张图片然后我们要做的是把所有这些权向量(weight vector)叠加成一个矩阵同时将b这三个数叠成一个数组,b也就变成了[1,1,2]
dense函数的作用是输入前一层的激活这里的a可以是a0,它等于x或者是后面一层的激活,也可以是排成一列的参数w或参数b。从上层激活输入a,从当前层输出激活
机器学习——神经网络(neural networks)_第18张图片
这里的W是一个2x3矩阵,列数是3,这和这层的单元数(units)相同,所以这里的units=3
将a设为一个由0组成的数组,它的元素数量与单元数量相同,在本例中,我们需要输出三个激活值这将a初始化为[0,0,0],一个包含3个0的数组
接下来,我们通过for循环来计算a的第一个、第二个和第三个元素

机器学习——神经网络(neural networks)_第19张图片
提取矩阵的第j列
计算z,参数w和激活量的点积,再加上b[j]
计算激活a_out[j]的值,它等于g (sigmoid函数)关于z的函数
dense函数的作用就是,输入前一层的激活,并给定当前层的参数输出下一层的激活。给定了dense函数,几个全连接层会这样按顺序地串在一起,以便在神经网络中实现前向传播。

机器学习——神经网络(neural networks)_第20张图片给定输入量x,可以计算激活量a1,a1= dense (x,w1,b1)
根据线性代数的符号惯例,表示矩阵时要用大写字母,小写表示向量和标量。

10.AGI(Artificial General Intelligence)强人工智能

机器学习——神经网络(neural networks)_第21张图片
11.矩阵乘法

能够扩大神经网络的规模以及考虑大型神经网络的原因之一是因为神经网络可以被向量化,他们可以通过矩阵乘法高效实现。事实证明,并行计算硬件,包括GPU以及CPU的一些功能是非常擅长做非常大的矩阵乘法。
【向量化的神经网络是如何工作的】

神经网络前向传播向量化实现

机器学习——神经网络(neural networks)_第22张图片

matmul是numpy执行矩阵乘法的方法,然后A_out等于激活函数g

向量之间的点乘

机器学习——神经网络(neural networks)_第23张图片每行的乘起来相加

转置写法

机器学习——神经网络(neural networks)_第24张图片

向量矩阵乘法 

转置=放平,列变行 

向量化可以使我们的代码运行的更快 

神经网络的向量化实现

机器学习——神经网络(neural networks)_第25张图片

机器学习——神经网络(neural networks)_第26张图片

在Tensorflow中,我们不用AT,称为a_in,XT称为A
TensorFlow中有个约定,单个样本实际上在矩阵X的行,而不是在矩阵X转置的行中,因此TensorFlow中的代码实现实际上是这样的
机器学习——神经网络(neural networks)_第27张图片

12.TensorFlow代码实现
机器学习——神经网络(neural networks)_第28张图片

第一部分指定函数,告诉TensorFlow如何计算推断

第二部分是让TensorFlow编译模型,关键步骤是指定你想要使用的损失函数,此处的函数叫做稀疏分类交又熵
第三部分是调用拟合函数,即告诉TensorFlow去拟合步骤1中确定的模型,使用步骤二中指定的损失或代价函数在数据集(x,y)中,epochs梯度下降的步数

这就是在TensorFlow中训练神经网络

【逻辑回归Model Training Steps】

机器学习——神经网络(neural networks)_第29张图片

第一步,指定给定输入X和参数如何计算输出

第二步,明确损失和代价

第三步,最小化我们训练的逻辑回归的代价函数

机器学习——神经网络(neural networks)_第30张图片

第一步是确定给定输入x和参数w和b的情况下如何计算输出

第二步是编译这个模型告诉它你想用的损失函数,这里是用来指定损失函数的代码,这个函数是二元交叉熵损失函数(binary cross entropy),在TensorFlow中这个损失函数被称为二元交叉熵,这个函数是要求TensorFlow利用该损失函数编译神经网络   ​​​​​​​

第三步是调用函数去最小化神经网络函数的代价用fit反向传播

13.常用的激活函数

机器学习——神经网络(neural networks)_第31张图片

对于输出层如何选择激活函数取决于y的值,二分类问题用sigmoid,结果有正有负用线性激活函数,结果只能是非负,使用ReLU函数 

对于隐藏层,大多数人使用ReLU函数,因为其速度快而且ReLU函数只在图形的一个部分是平坦的,使用梯度下降如果平坦的地方比较多效率会慢

机器学习——神经网络(neural networks)_第32张图片

14.多分类问题(multiclass classification problems) 

机器学习——神经网络(neural networks)_第33张图片

softmax回归算法是逻辑回归的推广,是一种针对多分类环境的二元分类算法
机器学习——神经网络(neural networks)_第34张图片

损失函数,只有一项,与其他项无关 

机器学习——神经网络(neural networks)_第35张图片

将softmax函数放到输出层 

机器学习——神经网络(neural networks)_第36张图片

有了这个,你的Softmax层现在可以给你估计y是这10个输出标签中任意一 个的概率。

softmax的Tensorflow实现
机器学习——神经网络(neural networks)_第37张图片

稀疏的分类交叉熵损失函数,稀疏表示y只能取这10个值中的一个

但在实际中不这样写,结果不精确

机器学习——神经网络(neural networks)_第38张图片把a展开成下面这个表达式,TensorFlow可以重新排列表达式中的项,想出一个数值上更精确的方法来计算这个损失函数

通过以下方法来表示损失函数为TensorFlow提供了更多的灵活性,如何计算这个以及它是否要显式地计算a,他的作用是设置输出层,只使用线性激活函数,将交叉熵损失函数和损失函数都封装进了这里特殊的损失函数里,logits=z,TensorFlow会把z作为中间值来计算,这可以让TensorFlow的数字舍入误差小一点,因为当涉及到softmax时,数值舍入误差可能会变得更糟
机器学习——神经网络(neural networks)_第39张图片

此时神经网络的最后一层不再输出这些概率值了,而是输出z1--z10
机器学习——神经网络(neural networks)_第40张图片

如果你想要把逻辑回归和代价函数整合在一起,那么对于逻辑回归,需要这样改代码,把输出值映射到Logistic函数中,得到概率

​​​​​​​
机器学习——神经网络(neural networks)_第41张图片
15.多标签分类问题(Classification with multiple outputs)

训练一个单一的神经网络来同时检测三种物:汽车、公交车和行人,因为我们要解决三个二元分类问题:有车吗?有公交吗?有行人吗?可以对输出层的这三个节点使用sigmoid激活函数
机器学习——神经网络(neural networks)_第42张图片

16. Adam优化算法(自适应矩估计(Adaptive Moment Estimation))

自动调整学习率,比梯度下降快

tf.keras.optimizer.adam优化器,Adam优化算法需要一些默认的初始学习率

17.其他类型网络层

卷积层

为什么不让每个神经元看所有的像素,而只看一部分像素

第一个优点,它能快计算速度(Faster computation)

第二个优点,神经网络使用这种层,称为卷积层(convolutional layer),需要的训练数据更少,也更不容易过拟合,这种层的每个神经元只关注输入图像的一个区域
机器学习——神经网络(neural networks)_第43张图片​​​​​​​

你可能感兴趣的:(人工智能,神经网络,人工智能)