吴恩达机器学习–神经网络

  • Post author:
  • Post category:其他




1.神经网络概述



1.1基本组成

  1. 输入层:数据
  2. 隐藏层:可以访问每个功能,即从上一层到输出层的每个值。当某些特征无关重要时,可以通过设置适当的参数进行适当的忽略;隐藏层在训练集中是看不到的,训练集中只有x,y,即输入层,输出层
  3. 输出层:输出的概率就是神经网络预测的输出概率

x向量:输入特征组成

a向量:x计算所得的激活值组成的向量

a:概率、最终的激活、神经网络的最终预测

在一般的逻辑方程中,我们需要手动特征工程,例如预测房屋价格,我们需要已知X1X2,并手动决定如何将他们组合在一起,以提供更好地功能;

神经网络不需要手动特征工程,他可以学习其要制作的功能,即当我们从数据中训练它时,不需要明确决定还有哪些功能,神经网络会自行计算

可能会遇到多隐藏层的模型,这样的多层被称为多层感知器。

神经网络架构问题:决定有多少个隐藏层以及每个隐藏层有多少个神经元,从而选择一个好的架构

在这里插入图片描述



1.2示例



1.2.1.需求预测

在这里插入图片描述



1.2.2. 图像感知

在这里插入图片描述



1.3 网络层

上标[i]表示第i层网络层

第i层网络层的输出是第i+1网络层的输入

对于每一层输入,对其应用一堆逻辑回归单元g函数

在这里插入图片描述

在这里插入图片描述

神经向量的输入层,一般不算在神经网络的总层数中,称作第0层。如下图为四层网络神经结构。

x向量定义为a[0]

g函数被定义为激活向量,其作用是计算某一层的激活值,如sigmoid函数。

在这里插入图片描述



1.4. 神经网络前向传播

f(x)表示线性回归或逻辑回归的输出;

这种模式也叫做前向传播算法,从左向右依次传播神经元的激活;

随着靠近输出层,隐藏单元的数量会逐渐减少,直到剩一个

在这里插入图片描述



1.5 Tensorflow中数据形式

先用Numpy数据形式表现,是两个[],代表是二维数组,当只有一个[]时,表示是一个一维数组;

二维数组形式可以让TensorFlow计算更高效

在这里插入图片描述

#在TensorFlow中表示矩阵的方式:
#变为tf.Tensor([],)的形式;
tf.Tensor([],)的形式 也被称为张量

#在NumPy中表示矩阵的方式:
np.array([[]])

#从TensorFlow方式变回NumPy的方式:
a1.numpy()


执行顺序

:NumPy以自己的方式存储二维数据,然后将数组传递给TensorFlow,传递过来时,TensorFlow喜欢将其转换为自己的内部格式–张量,然后使用张量有效运行,当读回数据时,可将数据保留为张量,或转换回NumPy数组

在这里插入图片描述



1.6 构建神经网络的方法



1.6.1. 逐步

在这里插入图片描述



1.6.2. 构建神经网络密集负载

  1. 顺序函数密集流的作用—>自动将两层串在一起形成一个神经网络 张量流顺序函数的新编码约定:model
  2. 然后将训练集中的数据存储在矩阵x或数组y中; 然后再运行编译功能model.compile();
  3. 然后再把x,y数据进行模型拟合model.fit();
  4. 最后进行推理或预测,可以使用模型预测model.predict()对新给的x进行预测;

    在这里插入图片描述



1.7 前向传播代码

在这里插入图片描述

在这里插入图片描述



2 Optional



2.1.人工智能

在这里插入图片描述

ANI:狭隘人工智能,专注于实现某一个方面

AGI:人工智能,模拟人大脑的行为



2.2 向量化

神经网络高效的原因:可矢量化,可以使用矩阵乘法有效实现

在这里插入图片描述

向量点乘

在这里插入图片描述

矩阵点乘

在这里插入图片描述

Numpy中矩阵相乘

在这里插入图片描述

网络层向量化

在这里插入图片描述



3.Tensorflow

在tensorflow中训练神经网络的代码

在这里插入图片描述



3.1 模型训练步骤

以逻辑回归为例

在这里插入图片描述

1.指定如何在给定输入x和参数的情况项目,计算输出

在这里插入图片描述

2.指定损失和成本

指定什么是损失函数,同时定义我们用来训练神经网络的成本函数

损失函数:二元交叉熵

在这里插入图片描述

3.最小化成本函数,其中最重要的是计算偏导数,那么此时调用tensorflow库中的fit函数,就可利用反向传播的方法计算

在这里插入图片描述

在这里插入图片描述



3.2 激活函数

最常用的激活函数

在这里插入图片描述



3.2.1选择激活函数

1、输出层的激活函数,取决于输出层要预测的y标签是什么

Y=0/1(二进制分类问题):Sigmoid

Y=+/-:线性激活函数

Y>=0:ReLU

在这里插入图片描述

2、隐藏层的激活函数,一般用ReLU作为默认激活函数

ReLU更快,且只有一部分是平坦的,sigmoid有两处平坦。平坦部分会使得梯度下降很慢,效果不明显

在这里插入图片描述



3.2.2为什么神经网络中要用激活函数

如果使用线性激活函数,或者不使用激活函数时,那么大型的神经网络计算出的值就等于线性回归函数的输出



4 多分类问题

当输出的y值不止为0/1时,而是有多个输出;即只输出一个数字,但这个数字取少量离散值而不是任何数字

在这里插入图片描述



4.1 softmax回归算法



4.1.1 概述

~Softmax模型是逻辑回归模型的泛化

在这里插入图片描述



4.1.2 cost函数

当aj越小,则L越大;

所以当aj无限接近1时,则说明与准确值越来越接近了,L越小

在这里插入图片描述



4.1.3 output

在这里插入图片描述

代码实现示例,但实际不推荐,在4.1.4课程中会讲到

在这里插入图片描述



4.1.4 改进实现

舍入误差改进–更准确的计算

不再用中间值a代替了,直接将最原始的公式代入式中,让tensorflow可以重新排列术语,使计算这种数值更准确;也就是说

不计算中间值


此时,则改变了激活函数,不再用softmax,而使用线性激活函数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



4.2. 多标签分类问题

三个二分类问题

在这里插入图片描述

1、将三类问题放在一个神经网络中时:对于输出层的每一个结点,分别使用一次sigmoid激活函数;即将三类问题放在一个向量中输出

2、当然也可以按图中第一行所示,分为三个神经网络分别输出检测

在这里插入图片描述



5. 高级优化方法

代替梯度下降,更快的降低成本函数,找到参数值—–Adam(自适应矩估计)

即改变学习率

当α过小,朝一个方向下降速度太慢时,可自动增大尔法;

当α过大,使方向来回摇摆时,可自动减小尔法;

α在全程并不是唯一值,可自动变化

在这里插入图片描述

该方法的代码,与原来相比,仅是多了一步选择Adam优化器:

但是该方法需要默认初始尔法值,图中举例为10^-3

在这里插入图片描述



6.其他的网络层模型

之前我们见到的都是密集层神经网络,即下一层都会受到上一层的激活

~卷积层:每个神经元都只能看到输入的局部信息(可重叠),是一个有限的局部输入窗口

为什么只看一部分信息?

  1. 计算更快
  2. 需要更少的训练数据
  3. 不易过拟合

此时会涉及架构参数的选择如:每个神经元可以看到的输入窗口有多大、一层有几个神经元。。。

由卷积层构成的网络:卷积神经网络

在这里插入图片描述



版权声明:本文为m0_46520099原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。