6. 神经网络的内积

目录

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),因为矩阵的乘法是有顺序的!

  1. 矩阵的乘积是通过从左边矩阵的行(横向)和右边矩阵的列(纵行)以对应元素的方式相乘后再求和而得到的,并且运算的结果保存为新的多维数组的元素。
  2. 所以 np.dot(A,B) 时候,A 的列数必须等于 B 的行数!
  3. 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 使用场合 

        神经网络内积(也称为点积或标量积)是一种基本的数学操作,它在网络的各个层次和阶段中发挥着重要作用。下面的几种作用可能大家现在还不明白,没关系,我们在后面慢慢讲。大家了解到神经网络的内积非常重要不可或缺就行。

  1. 线性变换(Linear Transformation): 在神经网络的每一层中,输入向量与权重向量的内积用于实现线性变换。具体来说,神经元的输出是输入向量与权重向量的内积加上一个偏置(bias),然后通过激活函数进行非线性变换。                                                         z=w⋅x+b                                                                                                                                 其中,𝑤w 是权重向量,𝑥x 是输入向量,𝑏b 是偏置,𝑧z 是线性变换的结果。

  2. 激活函数输入的计算: 计算每个神经元的激活值之前,需要将输入向量和权重向量做内积运算。这个激活值再经过非线性激活函数(如ReLU、Sigmoid或Tanh)得到最终输出。

    𝑎=𝜎(𝑧)

    其中,𝜎 表示激活函数,a 是激活值。

  3. 损失函数中的梯度计算: 在反向传播(Backpropagation)过程中,需要计算损失函数对权重的梯度。梯度计算中也涉及到许多内积运算,以更新权重。

    ∇𝑤=∂𝐿/∂𝑤​

    其中,L 是损失函数,∇w​ 是损失函数对权重的梯度。

  4. 卷积操作中的局部内积: 在卷积神经网络(CNN)中,卷积操作实际上是输入数据的局部区域与卷积核(滤波器)的内积。这种局部内积用于提取输入数据的局部特征。

  5. 相似度计算: 在一些特殊的应用场合,如推荐系统和自然语言处理中的词向量(word embedding)表示中,内积常用来计算向量之间的相似度或相异度。例如,通过内积可以计算两个向量的余弦相似度:

    cosine similarity = \frac{\displaystyle a\cdot b }{||a|| ||b||}

    其中,a 和 b 是两个向量,∣∣𝑎∣∣ 和 ∣∣𝑏∣∣ 是它们的范数。

  6. 注意力机制(Attention Mechanism)中,内积用于计算查询(query)向量与键(key)向量之间的相关性分数,这些分数用于加权求和值(value)向量以生成注意力输出。

        总结来说,内积是神经网络中一种核心的数学运算,贯穿于前向传播、反向传播、特征提取和相似度计算等多个方面,是实现神经网络各类功能的基础。

2.2 Python 实现

        我们可以使用 NumPy 矩阵乘法来实现神经网络的内积。

'''

要是大家觉得写得还行,给我回复几个字吧,想给博客涨涨人气,非常感谢!

'''

  • 26
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南野栀子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值