【机器学习】11-14 神经网络 & TensorFlow实现 & Python实现 & 向量化
11 Neural Networks Model
11.0 Neural Networks Intuition
神经网络基本构建方式:若干层,Input Layer - 若干个Hidden Layer - Output Layer
输入层有若干个原始特征,中间层(隐藏层)可以看作是从上一层的特征中自动学习出的高级特征,最终输出层得到预测结果。这个“高级特征”正是神经网络强大能力的来源,它实现了特征的自动抽取。隐藏层中的每个节点(或称神经元)都代表了一个从输入数据中提取出的抽象概念。例如,图像识别,可以认为中间层先是抽取了边缘特征,然后抽取了某些类型的图像特征,最终判断结果。

注:
- 神经网络最核心的两个操作:线性加权和非线性激活。上一层中的特征通过加权得到下一层中的某个特征值,类似于一个简单的线性回归,但是在做完加权运算后,一个神经元还会将结果输入到一个非线性激活函数中。非线性是使神经网络能够解决复杂问题的关键。没有激活函数,无论多少层堆叠,网络的功能都等同于单层线性模型。神经网络由这样庞大数量的简单运算所组成。
- 每个层中的特征节点都与上一层中的所有特征节点相连,即不需要人工去指定,如果某个特征不需要,训练过程(通过梯度下降)会自动将不重要的连接权重降至接近零。这种结构称作全连接层 (Fully Connected Layer, FC) 或 密集层 (Dense Layer)。
- 神经网络架构的设计关键之一在于设计中间层的层数以及每一层特征值的数量。
11.1 Neural Network Layer
每个层有若干个神经元,每个神经元接收上一层的输入x⃗\vec xx,然后做加权,再做非线性激活(g(z)g(z)g(z),例如前面提到的Sigmoid函数)。
![[图片]](https://i-blog.csdnimg.cn/direct/2c7fecc950684b95b9ecf350bb984456.png)
用右上角的方括号数字,表示第几层。
再总结一下:每一层的神经元,接收上一层输出的数字向量,对齐应用一系列逻辑回归单元,得到另一个数字向量作为输出,传递到下一层中。
11.2 More Complex Neural Networks
例子:
![[图片]](https://i-blog.csdnimg.cn/direct/00792bcaa3e04fd6921ffaeaeac0a512.png)
输入层为第0层,中间的1, 2, 3层为隐藏层,第4层为输出层。
注:按照惯例,称一个神经网络有n层,包括隐藏层和输出层,不包括第0层输入层。例如上图例子为4层神经网络。
公式表达:第lll层神经网络的输出为a⃗[l]\vec a^{[l]}a[l],第 jjj个神经元的输出:
aj[l]=g(w⃗j[l]⋅a⃗[l−1]+bj[l])a_j^{[l]}=g(\vec w_j^{[l]} \cdot \vec a^{[l-1]} + b_j^{[l]})aj[l]=g(wj[l]⋅a[l−1]+bj[l])
注:
- 神经元(neuron)的概念与单元(Unit)等同,上述也可以描述为第lll层神经网络的第jjj个单元(神经元)
- 函数g称作激活函数(Activation Function),输出激活值。Sigmoid函数就是一种激活函数。
11.3 Forward Propagation (Inference: making predictions)
从第0层输入层,依次计算激活值,最后得到输出值,即从左到右,称作前向传播(FP,Forward Propagation),也叫推理(Inference)。
与之相对的是反向传播(BP,Backword Propagation/Back Propagation),之后会再介绍。
12 TensorFlow Implementation
12.1 Inference in Code
代码实现推理(前向传播),以TensorFlow为例。
![[图片]](https://i-blog.csdnimg.cn/direct/4b64a5ddf99642538bf86c52de9f8200.png)
这里用的Dense层,还会有其他类型的层。这里忽略了细节,例如如何加载TensorFlow库,如何加载权重参数w, b。
12.2 Data in TensorFlow
Numpy和TensorFlow中的数据表示存在部分差异。
注意上面图中的代码,np.array中有两个中括号,这是因为TensorFlow的数据默认是张量Tensor,可以视作类似于矩阵,二维数组,所以需要用两个中括号来表示,即使只有1行。
![[图片]](https://i-blog.csdnimg.cn/direct/8020ee674fcf4f8ea3a1a8e742006ae9.png)
此外,参考上图,TensorFlow中存储的Tensor和numpy中的array是不同的,可以用".numpy()"来转换。当numpy的array传入TensorFlow时,会转为Tensor处理。
12.3 Building a Neural Network
前面提到了一种方式:
![[图片]](https://i-blog.csdnimg.cn/direct/82c1287d2cb5453e854d57a6de864aba.png)
在TensorFlow还可以这样创建,用Sequential串联:
![[图片]](https://i-blog.csdnimg.cn/direct/aeb93c59a76c4f598ee4d51013a528bc.png)
参照上图,有几点需要注意:
-
Sequential串联各层,但通常我们不必用变量存储层,再传递给Sequantial,可以像这样直接写:
![[图片]](https://i-blog.csdnimg.cn/direct/be551f3fcc9e457eb20942157732f16b.png)
-
x为输入,每一行是每一个样本的输入向量
-
关于 model.compile 和 model.fit 后续介绍
-
model.predict 执行推理(前向传播)
13 Neural Network Implementation in Python
13.1 Forward Prop in a Single Layer
![[图片]](https://i-blog.csdnimg.cn/direct/c4ce6bc454a641128b0e44febd92d101.png)
13.2 General Implementation of Forward Propagation
![[图片]](https://i-blog.csdnimg.cn/direct/503637149f434030964c3af012395dd4.png)
注:一般用大写字母表示矩阵,小写字母表示向量(一维)或标量(数值)
附:ANI和AGI
- ANI (Artificial Narrow Intelligence / 弱人工智能): 这是我们目前所处的阶段。ANI被设计和训练来执行特定的、狭窄的任务。它们在特定领域(如下棋、面部识别、语言翻译)可以表现得非常出色,甚至超越人类,但它们没有意识、情感或跨领域的学习能力。
- AGI (Artificial General Intelligence / 强人工智能): 这是AI的未来目标。AGI指的是拥有与人类同等智慧的AI,能够理解、学习和应用其智能来解决任何问题,就像一个正常人一样。它将具备推理、规划、抽象思考和跨领域学习的能力。
- 我们并没有模拟出大脑的算法功能。有生物实验表明,大脑的算法功能可以根据输入自适应,例如将触觉输入和主管触觉的大脑部分断开连接,输入视觉,这部分的大脑可以自适应处理视觉。
14 Vectorization
14.1 How Neural Networks are Implemented Efficiently
神经网络可以矢量化,用并行计算硬件处理,所以可以构建高效的大型神经网络
14.2 Matrix Multiplication
区分 np.dot点积 和 np.matmul矩阵相乘
14.3 Matrix Multiplication Rules
线性代数的知识,略
14.4 Matrix Multiplication Code
注:可以用"@"运算符代替np.matmul
更多推荐
所有评论(0)