Day6 神经网络的向量基础

Day6 神经网络的向量基础

向量基本概念

向量是数学中的一个基本概念,指具有大小和方向的量。

  • 向量通常用箭头表示,如 a⃗\vec{a}a
  • 也可以用数对或坐标形式表示,如a⃗=(x,y)\vec{a} = (x, y)a=(x,y)在二维空间中,或a⃗=(x,y,z)\vec{a} = (x, y, z)a=(x,y,z)在三维空间中。
  • 也可以用不带箭头的加粗黑色斜体字母 a 表示

向量的坐标表示

将向量的箭头起点放在坐标系的原点,箭头终点的坐标即为该向量的坐标表示。

例如,二维向量a⃗=(a1,a2)\vec{a} = (a_1, a_2)a=(a1,a2)表示一个从原点指向点(a1a_1a1, a2a_2a2​)的箭头。在三维空间的情况下也是同样的。下图右 a = (1, 2, 2) 表示右图所示的向量。

在这里插入图片描述


向量的大小

  • 向量的大小,也称为向量的模或长度,记作 ∥A⃗∥\| \vec{A} \|A。向量的模表示向量的大小,可以通过勾股定理计算。例如,对于二维向量 A⃗=(a1,a2)\vec{A} = (a_1, a_2)A=(a1,a2),其模为 ∥A⃗∥=a12+a22\| \vec{A} \| = \sqrt{a_1^2 + a_2^2}A=a12+a22。模为1的向量称为单位向量。模为零的向量称为零向量,记作 0⃗\vec{0}0,零向量的方向是任意的。

向量的内积

  • 向量的内积(点乘/数量积)是对两个向量执行点乘运算,即对这两个向量对应位一一相乘之后求和的操作。内积的几何意义包括表征或计算两个向量之间的夹角,以及向量在一个方向上的投影。

  • 对于两个向量 a⃗=(a1,a2,…,an)\vec{a} = (a_1, a_2, \ldots, a_n)a=(a1,a2,,an)b⃗=(b1,b2,…,bn)\vec{b} = (b_1, b_2, \ldots, b_n)b=(b1,b2,,bn),它们的内积为:

    • a⃗⋅b⃗=a1b1+a2b2+…+anbn\vec{a} \cdot \vec{b} = a_1 b_1 + a_2 b_2 + \ldots + a_n b_nab=a1b1+a2b2++anbn

    • 内积的性质包括

      • 对称性a⃗⋅b⃗=b⃗⋅a⃗\vec{a} \cdot \vec{b} = \vec{b} \cdot \vec{a}ab=ba
      • 线性性a⃗⋅(λb⃗+μc⃗)=λ(a⃗⋅b⃗)+μ(a⃗⋅c⃗)\vec{a} \cdot (\lambda \vec{b} + \mu \vec{c}) = \lambda (\vec{a} \cdot \vec{b}) + \mu (\vec{a} \cdot \vec{c})a(λb+μc)=λ(ab)+μ(ac)
      • 正定性a⃗⋅a⃗≥0\vec{a} \cdot \vec{a} \geq 0aa0,且 a⃗⋅a⃗=0\vec{a} \cdot \vec{a} = 0aa=0 当且仅当 a⃗=0⃗\vec{a} = \vec{0}a=0
      • 投影公式:向量a⃗\vec{a}a在向量b⃗\vec{b}b方向上的投影为 a⃗⋅b⃗∥b⃗∥\frac{\vec{a} \cdot \vec{b}}{\| \vec{b} \|}bab
      • 夹角公式:向量a⃗\vec{a}ab⃗\vec{b}b的夹角余弦为 cos⁡∠(a⃗,b⃗)=a⃗⋅b⃗∥a⃗∥∥b⃗∥\cos \angle (\vec{a}, \vec{b}) = \frac{\vec{a} \cdot \vec{b}}{\| \vec{a} \| \| \vec{b} \|}cos(a,b)=a∥∥bab

      二维和三维空间中的向量性质可以照搬到任意维空间中。神经网络虽然处理的是高维空间(如数万维),但二维和三维空间中的向量性质仍然适用。

    • 利用夹角公式,我们可以计算两个向量的内积:

      • a⃗⋅b⃗=∥a⃗∥∥b⃗∥cos⁡∠(a⃗,b⃗)\vec{a} \cdot \vec{b} = \| \vec{a} \| \| \vec{b} \| \cos \angle (\vec{a}, \vec{b})ab=a∥∥bcos(a,b)

      在这里插入图片描述

      • ① 当两个向量方向相反时,内积取得最小值.
      • ② 当两个向量不平行时,内积取平行时的中间值。
      • ③ 当两个向量方向相同时,内积取得最大值。

      性质①就是后述的梯度下降法的基本原理。

      另外,可以认为内积表示两个向量在多大程度上指向相同方向。如果将方向相似判定为“相似”,则两个向量相似时内积变大。这个观点对于后续学习卷积神经网络时十分重要。
      在这里插入图片描述


柯西-施瓦茨不等式

柯西-施瓦茨不等式是数学中的一个基本且重要的不等式,它定义了在内积空间中,两个向量的内积与其各自范数(或长度)之间的关系。具体形式为:

∣a⃗⋅b⃗∣≤∥a⃗∥∥b⃗∥| \vec{a} \cdot \vec{b} | \leq \| \vec{a} \| \| \vec{b} \|aba∥∥b 或者 −∥a⃗∥∥b⃗∥≤a⃗⋅b⃗≤∥a⃗∥∥b⃗∥-\| \vec{a} \| \| \vec{b} \|\leq \vec{a} \cdot \vec{b} \leq \| \vec{a} \| \| \vec{b} \|a∥∥baba∥∥b

证明方法:利用夹角公式

根据夹角公式,我们有:

a⃗⋅b⃗=∥a⃗∥∥b⃗∥cos⁡∠(a⃗,b⃗)\vec{a} \cdot \vec{b} = \| \vec{a} \| \| \vec{b} \| \cos \angle (\vec{a}, \vec{b})ab=a∥∥bcos(a,b)

由于余弦函数的值域是 [−1,1][-1, 1][1,1],因此:

∣cos⁡∠(a⃗,b⃗)∣≤1| \cos \angle (\vec{a}, \vec{b}) | \leq 1cos(a,b)1

将上述不等式代入夹角公式中,我们得到:

∣a⃗⋅b⃗∣=∣∥a⃗∥∥b⃗∥cos⁡∠(a⃗,b⃗)∣≤∥a⃗∥∥b⃗∥| \vec{a} \cdot \vec{b} | = | \| \vec{a} \| \| \vec{b} \| \cos \angle (\vec{a}, \vec{b}) | \leq \| \vec{a} \| \| \vec{b} \|ab=∣∥a∥∥bcos(a,b)a∥∥b

这就证明了柯西-施瓦茨不等式。


张量

张量(Tensor)是向量的推广,是一个多维数组。在神经网络中,张量常用于表示多维数据,如图像数据(三维张量:高度、宽度、颜色通道)或更高维的数据结构。谷歌提供的人工智能学习系统 TensorFlow 的命名中就用到了这个数学术语。

柯西-施瓦茨不等式证明方法二:构造二次函数并利用其性质

  1. 构造二次函数

    考虑二次函数 f(t)=∥a⃗+tb⃗∥2f(t) = \| \vec{a} + t \vec{b} \|^2f(t)=a+tb2,其中 ttt 是一个实数。

  2. 展开二次函数

    利用向量的模和内积的定义,我们可以将 f(t)f(t)f(t) 展开为:

    f(t)=(a⃗+tb⃗)⋅(a⃗+tb⃗)=∥a⃗∥2+2t(a⃗⋅b⃗)+t2∥b⃗∥2 f(t) = (\vec{a} + t \vec{b}) \cdot (\vec{a} + t \vec{b}) = \| \vec{a} \|^2 + 2t (\vec{a} \cdot \vec{b}) + t^2 \| \vec{b} \|^2 f(t)=(a+tb)(a+tb)=a2+2t(ab)+t2b2

  3. 分析二次函数的性质

    由于 f(t)f(t)f(t) 是一个关于 ttt 的二次函数,并且其系数 $ | \vec{b} |^2 $ 是非负的,因此 f(t)f(t)f(t) 是一个开口向上的抛物线。这意味着对于所有的 tttf(t)f(t)f(t) 的值都是非负的,即 f(t)≥0f(t) \geq 0f(t)0

  4. 利用二次函数的判别式

    对于二次函数 f(t)=At2+Bt+Cf(t) = At^2 + Bt + Cf(t)=At2+Bt+C,其判别式 Δ=B2−4AC\Delta = B^2 - 4ACΔ=B24AC。当 Δ≤0\Delta \leq 0Δ0 时,二次函数没有实数根,即在整个实数域内都是非负的。

    将我们的二次函数与标准形式对比,我们可以得到:

    A=∥b⃗∥2,B=2(a⃗⋅b⃗),C=∥a⃗∥2 A = \| \vec{b} \|^2, \quad B = 2 (\vec{a} \cdot \vec{b}), \quad C = \| \vec{a} \|^2 A=b2,B=2(ab),C=a2

    因此,判别式为:

    Δ=[2(a⃗⋅b⃗)]2−4∥a⃗∥2∥b⃗∥2=4(a⃗⋅b⃗)2−4∥a⃗∥2∥b⃗∥2 \Delta = [2 (\vec{a} \cdot \vec{b})]^2 - 4 \| \vec{a} \|^2 \| \vec{b} \|^2 = 4 (\vec{a} \cdot \vec{b})^2 - 4 \| \vec{a} \|^2 \| \vec{b} \|^2 Δ=[2(ab)]24∥a2b2=4(ab)24∥a2b2

  5. 得出不等式

    由于 f(t)≥0f(t) \geq 0f(t)0 对于所有的 ttt 都成立,因此判别式 Δ≤0\Delta \leq 0Δ0。将判别式的表达式代入,我们得到:

    4(a⃗⋅b⃗)2−4∥a⃗∥2∥b⃗∥2≤0 4 (\vec{a} \cdot \vec{b})^2 - 4 \| \vec{a} \|^2 \| \vec{b} \|^2 \leq 0 4(ab)24∥a2b20

    除以4并整理,我们得到柯西-施瓦茨不等式:

    (a⃗⋅b⃗)2≤∥a⃗∥2∥b⃗∥2 (\vec{a} \cdot \vec{b})^2 \leq \| \vec{a} \|^2 \| \vec{b} \|^2 (ab)2a2b2

    取平方根,我们得到最终的不等式形式:

    ∣a⃗⋅b⃗∣≤∥a⃗∥∥b⃗∥ | \vec{a} \cdot \vec{b} | \leq \| \vec{a} \| \| \vec{b} \| aba∥∥b

### BP神经网络用于风电预测的一天的Matlab代码实例 以下是基于BP神经网络实现一天风电功率预测的一个完整MATLAB代码示例。该代码通过训练数据集来构建模型,并利用测试数据进行验证。 #### 数据预处理阶段 为了提高预测精度,在输入BP神经网络之前,通常需要对原始风速和功率数据进行归一化处理: ```matlab % 加载数据 (假设已有的数据文件名为 'wind_data.mat',其中包含变量 wind_speed 和 power_output) load('wind_data.mat'); % 归一化函数定义 min_max_normalize = @(data) (data - min(data)) ./ (max(data) - min(data)); inverse_min_max = @(norm_data, original_data) norm_data .* (max(original_data) - min(original_data)) + min(original_data); % 对风速和功率输出分别进行归一化 normalized_wind_speed = min_max_normalize(wind_speed); normalized_power_output = min_max_normalize(power_output); ``` #### 构建并训练BP神经网络 下面展示如何创建一个具有单隐层结构的BP神经网络,并对其进行训练[^1]: ```matlab % 设置神经网络参数 hidden_layer_size = 10; % 隐藏层数量 input_vector = normalized_wind_speed'; % 输入向量转置为列形式 output_vector = normalized_power_output'; % 输出向量同样转换成列形式 % 创建前馈神经网络 net = feedforwardnet(hidden_layer_size); % 训练配置 net.trainFcn = 'trainlm'; % Levenberg-Marquardt backpropagation algorithm net.divideMode = 'time'; net.performParam.regularization = 0.01; % 开始训练过程 [trained_net, training_record] = train(net, input_vector, output_vector); ``` #### 测试与反归一化 完成训练之后,可以使用测试数据评估模型性能,并将预测结果还原到实际物理范围之内: ```matlab % 使用测试数据进行仿真 predicted_normalized_power = trained_net(input_vector); % 反归一化得到真实值 actual_predicted_power = inverse_min_max(predicted_normalized_power', power_output); % 绘制对比图 figure; plot(1:length(actual_predicted_power), actual_predicted_power, 'b-', ... 1:length(output_vector'), output_vector', 'r--'); legend('Predicted Power Output','Actual Power Output'); xlabel('Time Step'); ylabel('Power Output (kW)'); title('One Day Wind Power Prediction Using BP Neural Network'); grid on; ``` 以上即是一个完整的基于BP神经网络的一日风电预测流程及其对应的MATLAB代码实现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值