1.神经网络概述
1.1基本组成
- 输入层:数据
- 隐藏层:可以访问每个功能,即从上一层到输出层的每个值。当某些特征无关重要时,可以通过设置适当的参数进行适当的忽略;隐藏层在训练集中是看不到的,训练集中只有x,y,即输入层,输出层
- 输出层:输出的概率就是神经网络预测的输出概率
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. 构建神经网络密集负载
- 顺序函数密集流的作用—>自动将两层串在一起形成一个神经网络 张量流顺序函数的新编码约定:model
- 然后将训练集中的数据存储在矩阵x或数组y中; 然后再运行编译功能model.compile();
- 然后再把x,y数据进行模型拟合model.fit();
-
最后进行推理或预测,可以使用模型预测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.其他的网络层模型
之前我们见到的都是密集层神经网络,即下一层都会受到上一层的激活
~卷积层:每个神经元都只能看到输入的局部信息(可重叠),是一个有限的局部输入窗口
为什么只看一部分信息?
- 计算更快
- 需要更少的训练数据
- 不易过拟合
此时会涉及架构参数的选择如:每个神经元可以看到的输入窗口有多大、一层有几个神经元。。。
由卷积层构成的网络:卷积神经网络