文章目录
- 神经网络基础知识
- 神经网络前向传播
- 伪代码
- 前向传播中单个神经元的作用
- 矩阵加速运算
- 训练模型的细节
- 常用激活函数
- ReLU
- Sigmoid
- Linear activation function
- tanh
- 选择激活函数
- 选择`输出层`的激活函数
- 选择`隐藏层`的激活函数
- 为什么需要非线性激活函数
- Softmax激活函数
- 多标签分类问题
- 梯度下降更好训练神经网络的方式-Adam
神经网络基础知识
neuron:神经元
activation:激活
layer:层(一组神经元)
hidden layer :隐藏层
output layer :输出层
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B6xNWQeC-1668776797135)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221030200606871.png)]](https://img-blog.csdnimg.cn/16aca4fa3727415e81788463355916db.png)
数据量增大时,传统机器学习、小型神经网络、中型神经网络、大型神经网络的的性能变化,在大数据的今天一定要学深度学习
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IVDsGs2F-1668776797136)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221030205121498.png)]](https://img-blog.csdnimg.cn/4d53ce722225486aa2340e3dfa9c1aaa.png)
神经网络一层(layer)由一个或者多个神经元构成
每一层的输出值也称为激活值(activate)
第一层的输入特征也被称为输入层
最后一层为输出层
在构建大型神经网络时,我们不可能手动将特征连接到神经元,一般是下图这样
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ycs31yqt-1668776797136)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221030205634191.png)]](https://img-blog.csdnimg.cn/129e5e1a501a424fa9fed6d5f1acedb1.png)
也可以是下图这样
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GmGJRUDQ-1668776797137)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221030205709867.png)]](https://img-blog.csdnimg.cn/a0645fd2902a48c78b65144aa259a9b1.png)
中间的这一层三个神经元的也被称为隐藏层
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XBdEeWim-1668776797138)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221031220900845.png)]](https://img-blog.csdnimg.cn/26ea9d3423154c14a2f36573dd18b99e.png)
通常说几层神经网络时,包括最后一层输出层,但是不包括第0层输入层
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BkZvA9DJ-1668776797138)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221031221619137.png)]](https://img-blog.csdnimg.cn/82720a77eb63493c9ae50a3c41ffd8ba.png)
第i层的输出的激活值写做 a [ i ] a^{[i]} a[i]
所以上图中layer 4省略的为: a 2 [ 3 ] = g ( w [ 3 ] ∗ a [ 2 ] + b [ 3 ] ) a^{[3]}_2=g(w^{[3]}*a^{[2]}+b^{[3]}) a2[3]=g(w[3]∗a[2]+b[3])
神经网络前向传播
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1EqIJa8v-1668776881905)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221107123627842.png)]](https://img-blog.csdnimg.cn/94f23bd30fa049dbaa33e0af323963e8.png)
前向传播:神经元产生激活值传播给向下一层的神经元,作为下一层神经元输入值
伪代码
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dq1UFJeQ-1668776881906)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221107125928053.png)]](https://img-blog.csdnimg.cn/f6b644d991764303a3f2285b05270d4b.png)
layer 1有25个神经元,layer 2有15个神经元,layer 3 有一个神经元
简化代码:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BF37FLoq-1668776881906)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221107165406759.png)]](https://img-blog.csdnimg.cn/ced349875f9c4857bf4d2ad9591c6ba8.png)
进一步简化代码:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Z587Y0i-1668776881907)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221107165451502.png)]](https://img-blog.csdnimg.cn/ec974fd29fb64e1785370867d111be1d.png)
使用Tensorflow或者Pytorch能简便构建和训练神经网络,不过不能只会用,要弄懂这些代码在干些什么!
前向传播中单个神经元的作用
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E09VKE2z-1668776881907)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221107171347859.png)]](https://img-blog.csdnimg.cn/7d9d95a899c84287acf0f58eba65c1db.png)
上图为layer n的神经元,接受layer n-1的激活值 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn乘于权重加上偏置 b b b,传入激活函数中,得到这个神经元的激活值 a a a
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TYSKYtS2-1668776881907)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221107172138904.png)]](https://img-blog.csdnimg.cn/ac82c20bf19d4072ad09e30b0e291de4.png)
左侧代码为单个隐藏层的实现代码,右侧为整个四层的神经网络实现代码
矩阵加速运算
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C2BI5Zx5-1668777037837)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221107232411806.png)]](https://img-blog.csdnimg.cn/ea87a460a34942c5bce1f03d1707b868.png)
将左侧的代码中的输入数据 X X X和偏置 b b b都改为矩阵的形式,再利用矩阵相关加速运算
训练模型的细节
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pPh8UmDs-1668777061044)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221108210434373.png)]](https://img-blog.csdnimg.cn/1f8bca9804bd493ca203d6a92df5e73a.png)
训练模型的步骤:
1定义模型
2.定义损失函数
3.最小化损失函数
中间为手写字体识别只包含0,1,的二分类,使用sigmoid激活函数,使用二元交叉熵作为损失函数
右侧为在Tensorflow中训练这个模型的步骤
常用激活函数
ReLU
ReLU全名Rectified Linear Unit,意思是修正线性单元。
ReLU函数其实是分段线性函数,把所有的负值都变为0,而正值不变,这种操作被成为单侧抑制
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PHExipQ2-1668777079785)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221108212207156.png)]](https://img-blog.csdnimg.cn/5fd4ffa920354f4e8e33f7bf6868f0ad.png)
ReLU激活函数可写为: R e L U ( z ) = m a x ( 0 , z ) ReLU(z)=max(0,z) ReLU(z)=max(0,z)
Sigmoid

Sigmoid激活函数可写为: S i g m o i d ( z ) = 1 1 + e − z Sigmoid(z)=\frac{1}{1+e^{-z}} Sigmoid(z)=1+e−z1
Linear activation function

线性激活函数可写为: g ( z ) = z g(z)=z g(z)=z
tanh

tanh激活函数可写为: g ( z ) = 1 − e − 2 x 1 + e − 2 x g(z)=\frac{1-e^{-2x}}{1+e^{-2x}} g(z)=1+e−2x1−e−2x
选择激活函数
可以为神经网络中的神经元选择不同的激活函数
选择输出层的激活函数
二分类问题选择Sigmoid激活函数作为输出层的激活函数
回归问题选择线性激活函数作为输出层的激活函数
如果回归问题结果非负可以选择ReLU激活函数作为输出层的激活函数
选择输出层的激活函数时,通常根据输出的预测值
y
^
\hat{y}
y^来选择
选择隐藏层的激活函数
ReLU激活函数是现在神经网络中隐藏层最常用的激活函数
为什么需要非线性激活函数
如果神经网络使用的激活函数都是线性的,那么神经网络就只是线性回归模型,神经网络无法拟合比线性回归更复杂的模型
Softmax激活函数
Softmax是Sigmoid的推广,可以进行多分类任务
Softmax 激活函数:
将输入向量的值映射到(0,1)这个区间,转化为概率的形式,且转化后向量元素和为1,公式为:
向
量
A
=
[
a
1
,
a
2
,
a
3
.
.
.
a
4
]
T
s
o
f
t
m
a
x
(
a
i
)
=
e
a
i
∑
j
=
1
k
e
a
i
例
如
:
假
设
向
量
a
=
[
3.2
,
5.1
,
−
5.7
]
T
经
过
函
数
运
算
后
a
s
o
f
t
m
a
x
=
[
0.127
,
0.87
,
0.003
]
T
向量A=[a_1,a_2,a_3...a_4]^T\\ softmax(a_i)=\frac{e^{a_i}}{\sum_{j=1}^ke^{a_i}}\\\\ 例如: 假设向量a=\left[\ \ 3.2,\ \ 5.1,-5.7\ \ \right]^T\\ 经过函数运算后a_{softmax}=\left[\ \ 0.127,\ \ 0.87,\ \ 0.003\ \ \right]^T\\
向量A=[a1,a2,a3...a4]Tsoftmax(ai)=∑j=1keaieai例如:假设向量a=[ 3.2, 5.1,−5.7 ]T经过函数运算后asoftmax=[ 0.127, 0.87, 0.003 ]T
可以看出softmax激活函数的特性:让小的值变得很小,最大的值变得更大,使得分类效果更加明显更加利于分类
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1GaYpuFA-1668777181450)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221102214524919.png)]](https://img-blog.csdnimg.cn/9c0211ecd0dd432ca16b80985f321e01.png)
突出了最大值
损失函数

多标签分类问题
多标签分类,与一般的多分类问题不同,一般的多分类问题,如手写字识别,其真正的标签只有一个,而多标签分类,如下图的人、汽车、公共汽车识别,识别出的结果可能有多个
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GfjAKO0k-1668777239595)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221111133202680.png)]](https://img-blog.csdnimg.cn/d35e80a85c394a7ab78e0915705dedb0.png)
如何解决多分类问题:以上图为例子
1.可以将其视为三个完全独立的机器学习问题,需要三个神经网络分别检测
2.训练一个神经网络同时检测这人、汽车、公共汽车
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j9ZiEFV2-1668777239596)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221111133625341.png)]](https://img-blog.csdnimg.cn/79932aed96da4b8f8c1dd3c470817b6a.png)
梯度下降更好训练神经网络的方式-Adam
w j = w j − α ∂ ∂ w j J ( W ⃗ , b ) w_j=w_j-\alpha\frac{\partial}{\partial w_j}J(\vec{W},b) wj=wj−α∂wj∂J(W,b)
Adam算法,当学习率过小时可以自动增加 α \alpha α使得梯度下降的速度更快;
当学习率过大时,也可以使得学习率自动更小。
Adam算法可以自动调整学习率
Adam算法没有使用单一的全局学习率,对模型的每个参数使用不同的学习率如下图:

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W86egLy4-1668777271874)(C:\Users\98306\AppData\Roaming\Typora\typora-user-images\image-20221111141232435.png)]](https://img-blog.csdnimg.cn/82cfcb0566d44bdc866c8bd567963d10.png)



















