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 矩阵乘法来实现神经网络的内积。

'''

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

'''

相关推荐

  1. 神经网络

    2024-05-15 16:06:03       40 阅读
  2. 神经网络

    2024-05-15 16:06:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-15 16:06:03       76 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-15 16:06:03       81 阅读
  3. 在Django里面运行非项目文件

    2024-05-15 16:06:03       65 阅读
  4. Python语言-面向对象

    2024-05-15 16:06:03       76 阅读

热门阅读

  1. 【数据结构与算法】力扣 49. 字母异位词分组

    2024-05-15 16:06:03       27 阅读
  2. 大数据面试 --- 六

    2024-05-15 16:06:03       35 阅读
  3. R语言数据分析案例分析一个关于房价的数据集

    2024-05-15 16:06:03       30 阅读
  4. 平衡车电池UL2271认证是什么?

    2024-05-15 16:06:03       27 阅读
  5. Symbol类型的作用

    2024-05-15 16:06:03       27 阅读
  6. [前端] vue2的/deep/转化为vue3语法(笔记)

    2024-05-15 16:06:03       33 阅读
  7. vue3 动态加载页面

    2024-05-15 16:06:03       31 阅读
  8. error和exception的区别?

    2024-05-15 16:06:03       34 阅读
  9. ISBN查询图书api接口

    2024-05-15 16:06:03       32 阅读
  10. 解决方案:sql里的join跟left join有什么区别

    2024-05-15 16:06:03       29 阅读
  11. 探索Git:版本控制的革命(一文了解Git)

    2024-05-15 16:06:03       33 阅读
  12. 小米消金引领创新,打造重庆消费金融新生态

    2024-05-15 16:06:03       35 阅读
  13. 算法学习笔记(LCA)

    2024-05-15 16:06:03       25 阅读