一些神经网络的理解

概念

人工智能(Artifical Intalligent)是人们研究自己的思考与行为,并将其复制出应用的科学。大脑是人体最复杂的器官,目前人类还无法自由控制修改它,只能做出一些黑盒测试,心理学就是这样,通过问题刺激大脑判断其生物反应以及做出的应答。

人脑的功能很多,它可以调控运动,接受形成感觉,完成语言与对话,拥有情绪并且能操作执行某些行为,这与人类理想的计算机是一样的。通过研究神经科学,人脑可以实现一下功能

1、自由切换认知模式,同时具有很多决策方式

2、拥有很多先天具有的处理问题的方法

3、拥有强大的表达能力已经对抽象事物的描述能力

4、可以通过学习的行为,迅速组合已有的技能组合成新的技能

5、具有独立的意识

人工智能要研究的内容都是参考人脑进行研究的,而上述的5点,目前只能做到前2点。

神经网络即人工神经网络(Artificial Neural Networks)[ANN],一般是处理问题以及做出决策的数学模型。

卷积神经网络[CNN]

CNN全名卷积神经网络(Convolutional Neural Networks),这是一种计算机深度学习最具代表性的算法之一,可以充分利用训练出的多组模型并自由组合。

卷积神经网络参考了人脑的功能,主要分为自主学习与监督学习,其隐含层内的卷积核参数共享和层间连接的稀疏性使得卷积神经网络能够以较小的计算量对格点化特征,具有稳定高效的特点。

卷积神经网络模型

CNN1

CNN算法通过不断地卷积与池化,实现对模型处理为隐含层的卷积核,将不同的数据与卷积核建立起联系,而不同的联系得到的结果不同,而组成的核与数据的网络就是卷积出的神经网络(像人脑的神经网),所以得名卷积神经网络

卷积不是毫无根据的卷

所谓卷积,就是不断从样本中剥离出特征,每一个卷积核都对应着一个权重系数和一个偏移量[τ](每一个都像神经纤维上的细胞体一样),而卷积需要一个视野,就像人脑看事物并不能同时处理整体,而是用一定的范围观察部分,多次反复观察从而得出对事物整体的认知,卷积也要这样做,这个视野叫做卷积核。


卷积核就是一个二维的矩阵,矩阵中的每一个元素(卷积层参数)都像人眼中对不同色彩的敏感程度一样(图片解释)

CNN2

举个生活中的例子吧,视野就是考试时你们老师在纸上烫出的洞(过滤器),而下面的样本就像你的答题卡,老师不会统计你做错多少,而是把纸放在你的答题卡上比较,统计出你有多少个重合的点,进而得出你的分数

在这个过程就像是在做矩阵的乘法一样,事实也确实如此,通过不断的识别扫描,通过卷积核留下矩阵点乘的结果。

不知道矩阵乘法的看我

矩阵乘法分为点乘和矩阵乘,点乘就是矩阵每个点乘加和

$$
X=\left[ \begin{matrix} a11 & a12 & c13 \ a21 & a22 & a23 \ a31 & a32 & a33\end{matrix} \right]
$$

$$
Y=\left[ \begin{matrix} b11 & b12 & b13 \ b21 & b22 & b23 \ b31 & b32 & b33\end{matrix} \right]
$$

X与Y分别表示两个等型矩阵

$$
A=\left[ \begin{matrix} a11 & a12 & c13 \ a21 & a22 & a23 \ a31 & a32 & a33\end{matrix} \right]×\left[ \begin{matrix} b11 & b12 & b13 \ b21 & b22 & b23 \ b31 & b32 & b33\end{matrix} \right]
$$

点乘结果就可以表示成下面的形式

$$
B=\sum_{i=1}^n a_{ii}*b_{ii}
$$

叉乘就是行乘列,叉乘得到的是新矩阵C,而新矩阵C的i行j列可以用下面的式子算出(依然是X*Y哦)
$$
C_{ij}=\sum_{k=1}^pa_{ik}*b_{kj}
$$

点乘得出常数,叉乘得出新矩阵,这是一个点

知道矩阵乘法的可以跳转到这里

CNN3

卷积核也可以叫做过滤器,就像人眼睛会过滤掉一些不适合的内容,最好的就是feature maps的例子

CNN4

不断对图片进行卷积得到卷积层,层与层之间没有连接,要想实现,必须将卷积核(过滤器)连接,例如对RGB图片的处理,将图片分解为RGB三个通道,每个通道对应一个过滤器,每个过滤器彼此又相互联系

CNN5

池化的意义

1、在卷积层进行特征提取后,输出的特征图会被传递至池化层进行特征选择和信息过滤。池化层包含预设定的池化函数,其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。

2、在激励层的激励函数最常用的不是sigmoid而是 ReLU (修正线性单元函数)λ为随机变量

$$
f(x)=\begin{cases}
x & x>0\
λx&x≤0\
\end{cases}
$$

3、输入层->隐含层->输出层

隐含层包括卷积层,池化层,(堆积Inception),全连接层

池化分为Max或Avg pooling,与卷积的扫描类似,池化也需要一个窗口去扫描,作为扫描窗口必须有步长(stride)

CNN6

Max pooling就是取出扫描区块中的最大值,组成新的池中的数值,而Avg pooling就是取出扫描区域的平均值作为池中的数值,计算出新池中的数据后,经过ReLU的处理可以剔除不正常的数据,也就是负值,保证正常与协调。

使用python实现对图片的卷积

首先你要先有图片我这里使用下面的示范

将图片保存在同级目录下,命名为1.jpg,编写出以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import matplotlib.pyplot as pyplot
import pylab
import cv2
import numpy as np

filename = r"1.jpg"

# 读取图片
testimg = pyplot.imread(filename)
# 配置卷积核,卷积核不同,得到的效果也不同
fil = np.array([[1,1,1,1],
[1,-1,0,1],
[1,-1,-1,1],
[-1,-1,-1,-1]])

# 使用卷积核对图片卷积并池化
result = cv2.filter2D(testimg,-1,fil)
# 展示出卷积后的图片
pyplot.imshow(result)
pyplot.imsave(r"C:\Users\13846\Desktop\result.jpg",result)
pylab.show()

得到的结果是这样的

CNN7

深度神经网络[DNN]

深度神经网络(Deep Neural Networks)[DNN],可以理解为多个隐藏层并排放置的神经网络

深度神经网络模型

感知器是深度神经网络的一个微结构,他是一个有很多个输入,一个输出的模型,如图:

DNN1

而经过学习可以得到下面的模型:
$$
z=\sum_{i=1}^n\omega_ix_i+b
$$
其中b叫做偏移量ω则就是要训练出来的权重

为了限制输出的范围,对得出的y需要套上一个神经元激活函数,使得到的结果为1或-1,经常运用的激活函数是Sigmoid函数。

不过因为它只能输出两种类型的结果或者达到神经元函数饱和或过饱和时结果相同,这也导致了无法满足复杂的非线性模型,因此无法在工业生产使用,而只能做一些分类

因为每一个微结构都很简单所以组合起来复杂度就会非常高,这种模型用于计算回归,处理分类或者作为KNN与SVM另一种的分类算法存在,并且表达能力也非常强。
$$
Sigmoid(z)=\frac{1}{1+e^{-z}}
$$

DNN前向传播算法

DNN2

利用上层输出计算下一层的输出叫做DNN的前向传播算法,和感知器类似,我们也可以使用同样的计算方法,设我选择的激活函数是σ(z),指数位表达的是隐藏层,角码表达的是第几个神经元
$$
a^2_1=σ(z^2_1)=σ(ω^2_{11}x_1+ω^2_{12}x_2+ω^2_{13}x_3+ω^2_{14}x_4+b^2_1)
$$

$$
a^2_2=σ(z^2_2)=σ(ω^2_{21}x_1+ω^2_{22}x_2+ω^2_{23}x_3+ω^2_{24}x_4+b^2_2)
$$

$$
a^2_3=σ(z^2_3)=σ(ω^2_{31}x_1+ω^2_{32}x_2+ω^2_{33}x_3+ω^2_{34}x_4+b^2_3)
$$

第L层共有m个神经元,则对于第L层的第j个神经元的输出得到公式:
$$
a^l_j=σ(z^l_j)=σ(\sum^m_{k=1}ω^l_{jk}a^{l-1}_k+b^l_j)
$$
而每一个权重最终都可以表示在一个矩阵W中,所以也可以用矩阵表示
$$
a^l_j=σ(z^l_j)=σ(w^la^{l-1}+b^l)
$$

DNN反向传播算法

所谓反向传播算法,其实就是根据求导的链式法则反向得到计算过程中,神经节点的权重矩阵,当然,需要一些关于矩阵微分的知识。

我们知道各个节点都有权重矩阵,我们可以定义某一条路线为一个函数,那么这个函数就可以求导得到最终输出的结果。关于这个函数我们写作。
$$
f(x_i)=w_ix_i+b
$$
则有:
$$
w_i=\frac{\partial f(x_i)}{\partial x_i}
$$
其中x、w分别为样本的模型,则在神经网络中就有:
$$
z=\sum_{(m,n)} w_{mn}x_n+b_m
$$

$$
σ’(z)=\prod \frac{\partial l}{\partial z}
$$

根据你想了解的深度就可以求出在对应损失函数l的情况下,对应的权重矩阵w了。

吐槽

神经网络是机器学习部分非常重要的算法,目前主要的三种可以解决很多问题,不如知道原理后放心使用。


一些神经网络的理解
https://blog.minloha.cn/posts/111300e57886172021121307.html
作者
Minloha
发布于
2021年12月13日
更新于
2023年12月21日
许可协议