目录
1. 准备知识
1.1 NumPy 的多维数组
1.2 矩阵乘法
1.2.1 矩阵乘法顺序
1.2.2 矩阵乘法范例
2. 神经网络的内积
2.1 使用场合
2.2 Python 实现
1. 准备知识
1.1 NumPy 的多维数组
大家应该对多维数组都很熟悉,我不再多言。在 NumPy 模块中,可以使用 np.ndim() (
Return the number of dimensions of an array.)去获得多维数组的具体信息;用 np.shape 获得多维数组的形状。
我们先准备一个数据,可以看到这是一个二维数组,有四行三列数据。二维数据又称为矩阵。横排为行,竖排为列。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
multi_arr=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
multi_arr
1.2 矩阵乘法
1.2.1 矩阵乘法顺序
NumPy 模块提供 np.dot(A,B) 函数进行乘积计算,请注意,np.dot(A,B) 不等于 np.dot(B,A),因为矩阵的乘法是有顺序的!
- 矩阵的乘积是通过从左边矩阵的行(横向)和右边矩阵的列(纵行)以对应元素的方式相乘后再求和而得到的,并且运算的结果保存为新的多维数组的元素。
- 所以 np.dot(A,B) 时候,A 的列数必须等于 B 的行数!
- A 为(m,n),B 为 (n,k) 时,生成的心得多维数组元素形状为 (m,k)
1.2.2 矩阵乘法范例
范例代码如下:
multi_arr1=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
multi_arr2=np.array([[1,2],[3,4],[0,0]])
print("*"*50)
print(multi_arr1)
print("*"*50)
print(multi_arr2)
print("*"*50)
print(np.dot(multi_arr1,multi_arr2))
结果如下:
详细解释一下,各个数据的来源,大家应该能看懂了吧。
[[ 7 10] # 7 = 1*1+2*3+3*0;10 = 1*2+2*4+3*0;
[19 28] # 19 = 4*1+5*3+6*0;28 = 4*2+5*4+6*0;
[31 46] # 31 = 7*1+8*3+9*0;46 = 7*2+8*4+9*0;
[43 64]]
如果矩阵相乘不符合这个要求“所以 np.dot(A,B) 时候,A 的列数必须等于 B 的行数!”,那么则会报错。
2. 神经网络的内积
2.1 使用场合
神经网络内积(也称为点积或标量积)是一种基本的数学操作,它在网络的各个层次和阶段中发挥着重要作用。下面的几种作用可能大家现在还不明白,没关系,我们在后面慢慢讲。大家了解到神经网络的内积非常重要不可或缺就行。
-
线性变换(Linear Transformation): 在神经网络的每一层中,输入向量与权重向量的内积用于实现线性变换。具体来说,神经元的输出是输入向量与权重向量的内积加上一个偏置(bias),然后通过激活函数进行非线性变换。 z=w⋅x+b 其中,𝑤w 是权重向量,𝑥x 是输入向量,𝑏b 是偏置,𝑧z 是线性变换的结果。
-
激活函数输入的计算: 计算每个神经元的激活值之前,需要将输入向量和权重向量做内积运算。这个激活值再经过非线性激活函数(如ReLU、Sigmoid或Tanh)得到最终输出。
𝑎=𝜎(𝑧)
其中,𝜎 表示激活函数,a 是激活值。
-
损失函数中的梯度计算: 在反向传播(Backpropagation)过程中,需要计算损失函数对权重的梯度。梯度计算中也涉及到许多内积运算,以更新权重。
∇𝑤=∂𝐿/∂𝑤
其中,L 是损失函数,∇w 是损失函数对权重的梯度。
-
卷积操作中的局部内积: 在卷积神经网络(CNN)中,卷积操作实际上是输入数据的局部区域与卷积核(滤波器)的内积。这种局部内积用于提取输入数据的局部特征。
-
相似度计算: 在一些特殊的应用场合,如推荐系统和自然语言处理中的词向量(word embedding)表示中,内积常用来计算向量之间的相似度或相异度。例如,通过内积可以计算两个向量的余弦相似度:
其中,a 和 b 是两个向量,∣∣𝑎∣∣ 和 ∣∣𝑏∣∣ 是它们的范数。
-
在注意力机制(Attention Mechanism)中,内积用于计算查询(query)向量与键(key)向量之间的相关性分数,这些分数用于加权求和值(value)向量以生成注意力输出。
总结来说,内积是神经网络中一种核心的数学运算,贯穿于前向传播、反向传播、特征提取和相似度计算等多个方面,是实现神经网络各类功能的基础。
2.2 Python 实现
我们可以使用 NumPy 矩阵乘法来实现神经网络的内积。
'''
要是大家觉得写得还行,给我回复几个字吧,想给博客涨涨人气,非常感谢!
'''