首页
相册
统计
留言
更多
网安工具
CTF工具
关于
Search
1
椭圆曲线加密算法原理(ECC)
5,324 阅读
2
SMBGhost(CVE-2020-0796)漏洞利用
4,302 阅读
3
关于gdb调试
4,065 阅读
4
Arduino使用CubeCell开发板进行LORA无线通信
3,852 阅读
5
Diffie-Hellman密钥协商算法
3,542 阅读
深度学习
技术随笔
应急响应
漏洞复现
流量分析
溯源
入侵检测
Linux
eBPF
服务配置
渗透测试
信息收集
横向攻击
密码学
web安全
CTF
登录
Search
标签搜索
单片机
密码学
Windows
BPF
Python
Linux
Mysql
APP开发
软考
Cobalt Strike
flutter
入侵检测
HSM's Blog
累计撰写
53
篇文章
累计收到
11
条评论
首页
栏目
深度学习
技术随笔
应急响应
漏洞复现
流量分析
溯源
入侵检测
Linux
eBPF
服务配置
渗透测试
信息收集
横向攻击
密码学
web安全
CTF
页面
相册
统计
留言
网安工具
CTF工具
关于
搜索到
3
篇与
的结果
2023-02-23
CNN卷积神经网络
1. 卷积神经网络概述CNN的全称是"Convolutional Neural Network"(卷积神经网络),神经网络是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)结构和功能的数学模型或计算模型。神经网络由大量的人工神经元组成,按不同的连接方式构建不同的网络。CNN是其中的一种,还有GAN(生成对抗网络),RNN(递归神经网络)等,神经网络能够类似人一样具有简单的决定能力和简单的判断能力,在图像和语音识别方面能够给出更好的结果。1.1 CNN的原理CNN被广泛应用在图像识别领域,那么CNN是如何实现图像识别的呢?我们根据图中的例子来解释CNN的原理。CNN是一种人工神经网络,CNN的结构可以分为3层:卷积层(Convolutional Layer) - 主要作用是提取特征。池化层(Max Pooling Layer) - 主要作用是下采样(downsampling),却不会损坏识别结果。全连接层(Fully Connected Layer) - 主要作用是分类。我们可以拿人类来做类比,比如你现在看到上图中的小鸟,人类如何识别它就是鸟的呢?首先你判断鸟的嘴是尖的,全身有羽毛和翅膀,有尾巴。然后通过这些联系起来判断这是一只鸟。而CNN的原理也类似,通过卷积层来查找特征,然后通过全连接层来做分类判断这是一只鸟,而池化层则是为了让训练的参数更少,在保持采样不变的情况下,忽略掉一些信息。1.2 卷积层、池化层、全连接层卷积层(Convolutional Layer)那么卷基层是如何提取特征的呢?我们都知道卷积就是2个函数的叠加,应用在图像上,则可以理解为拿一个滤镜放在图像上,找出图像中的某些特征,而我们需要找到很多特征才能区分某一物体,所以我们会有很多滤镜,通过这些滤镜的组合,我们可以得出很多的特征。首先一张图片在计算机中保存的格式为一个个的像素,比如一张长度为1080,宽度为1024的图片,总共包含了1080 1024的像素,如果为RGB图片,因为RGB图片由3种颜色叠加而成,包含3个通道,因此我们需要用1080 1024 * 3的数组来表示RGB图片。我们先从简单的情况开始考虑,假设我们有一组灰度图片,这样图片就可以表示为一个矩阵,假设我们的图片大小为5 5,那么我们就可以得到一个5 5的矩阵,接下来,我们用一组过滤器(Filter)来对图片过滤,过滤的过程就是求卷积的过程。假设我们的Filter的大小为3 * 3,我们从图片的左上角开始移动Filter,并且把每次矩阵相乘的结果记录下来。每次Filter从矩阵的左上角开始移动,每次移动的步长是1,从左到右,从上到下,依次移动到矩阵末尾之后结束,每次都把Filter和矩阵对应的区域做乘法,得出一个新的矩阵。这其实就是做卷积的过程。而Filer的选择非常关键,Filter决定了过滤方式,通过不同的Filter会得到不同的特征。举一个例子就是:我们选择了2种Filter分别对图中的矩阵做卷积,可以看到值越大的就表示找到的特征越匹配,值越小的就表示找到的特征越偏离。Filter1主要是找到为"|"形状的特征,可以看到找到1处,转换后相乘值为3的网格就表示原始的图案中有"|",而Filter2则表示找到"\"形状的特征,我们可以看到在图中可以找到2处。拿真实的图像举例子,我们经过卷积层的处理之后,得到如下的一些特征结果:池化层(Max Pooling Layer)经过卷积层处理的特征是否就可以直接用来分类了呢,答案是不能。我们假设一张图片的大小为500 500,经过50个Filter的卷积层之后,得到的结果为500 500 * 50",维度非常大,我们需要减少数据大小,而不会对识别的结果产生影响,即对卷积层的输出做下采样(downsampling),这时候就引入了池化层。池化层的原理很简单,先看一个例子:我们先从右边看起,可以看到把一个4 4的矩阵按照2 2做切分,每个2 2的矩阵里,我们取最大的值保存下来,红色的矩阵里面最大值为6,所以输出为6,绿色的矩阵最大值为8,输出为8,黄色的为3,蓝色的为4,。这样我们就把原来4 4的矩阵变为了一个2 2的矩阵。在看左边,我们发现原来224 224的矩阵,缩小为112 * 112了,减少了一半大小。那么为什么这样做可行呢?丢失的一部分数据会不会对结果有影响,实际上,池化层不会对数据丢失产生影响,因为我们每次保留的输出都是局部最显著的一个输出,而池化之后,最显著的特征并没。我们只保留了认为最显著的特征,而把其他无用的信息丢掉,来减少运算。池化层的引入还保证了平移不变性,即同样的图像经过翻转变形之后,通过池化层,可以得到相似的结果。通常卷积层和池化层会重复多次形成具有多个隐藏层的网络,俗称深度神经网络。全连接层(Fully Connected Layer)全连接层的作用主要是进行分类。前面通过卷积和池化层得出的特征,在全连接层对这些总结好的特征做分类。全连接层就是一个完全连接的神经网络,根据权重每个神经元反馈的比重不一样,最后通过调整权重和网络得到分类的结果。因为全连接层占用了神经网络80%的参数,因此对全连接层的优化就显得至关重要,现在也有用平均值来做最后的分类的。全连接层负责将多个softmax函数将特征分类, TestCNN的三个流程卷积层ReLU层池化层全连接层交互式可视化学习CNNhttps://github.com/perlh/cnn-explainer2. 使用卷积神经网络实现验证码识别创建一个CNN流程:(class) Conv2d( in_channels: int, out_channels: int, kernel_size: _size_2_t, stride: _size_2_t=1, padding: _size_2_t |str=0, dilation: _size_2_t=1, groups: int=1, bias: bool=True, padding_mode: str='zeros', device: Any |None=None, dtype: Any |None=None)in_channels (int) – 输入图像中的通道的数量(一般一个图片有三个通道,分别为RGB)out_channels (int) – 卷积产生的通道的数量ernel_size (intortuple) – 卷积核的大小ride (intortuple,optional) – 卷积的步伐。默认值:1padding (intortuple,optional)– 输入图像两侧的零填充。默认值:0dilation (https://link.zhihu.com/?target=https%3A//docs.python.org/2/library/functions.html%23intortuple,optional) – 内核元素之间的间距。默认值:1groups (int,optional) –从输入通道到输出通道的阻塞连接数量。默认值:1bias (bool,optional) – 如果为True,则在输出中添加可学习的偏差。默认值:True归一化https://blog.csdn.net/bigFatCat_Tom/article/details/91619977(class) BatchNorm2d( num_features: int, eps: float = 0.00001, momentum: float = 0.1, affine: bool = True, track_running_stats: bool = True, device: Any | None = None, dtype: Any | None = None)num_features:一般输入参数为batch_sizenum_featuresheight*width,即为其中特征的数量eps:分母中添加的一个值,目的是为了计算的稳定性,默认为:1e-5momentum:一个用于运行过程中均值和方差的一个估计参数(我的理解是一个稳定系数,类似于SGD中的momentum的系数)affine:当设为true时,会给定可以学习的系数矩阵gamma和beta nn.Dropout(0.5)详解部分:Dropout 是为了防止过拟合而设置的Dropout 顾名思义有丢掉的意思nn.Dropout(p = 0.3) # 表示每个神经元有 0.3 的可能性不被激活Dropout 只能用在训练部分而不能用在测试部分Dropout 一般用在全连接神经网络映射层之后,如代码的 nn.Linear(20, 30) 之后原文链接:https://blog.csdn.net/weixin_47050107/article/details/122722516nn.Linear nn.Linear定义一个神经网络的线性层,方法签名如下: torch.nn.Linear(in_features, # 输入的神经元个数 out_features, # 输出神经元个数 bias=True # 是否包含偏置 )原文链接:https://blog.csdn.net/zhaohongfei_358/article/details/122797190# -*- coding: UTF-8 -*- import torch.nn as nn import captcha_setting # CNN Model (2 conv layer) class CNN(nn.Module): def __init__(self): super(CNN, self).__init__() # 使用Sequential快速搭建网络 self.layer1 = nn.Sequential( # 创建一个卷积层 # 提取32个特征,并且每个卷积核的大小为3x3,外面填充一圈0 nn.Conv2d(1, 32, kernel_size=3, padding=1), # 归一化处理, # 比如说开始每个像素点A都占255位, # 这样在后面的计算过程中,可能计算量比较大, # 如果使用归一化后,将数据A/255,这样数据都在[-1,1]中间 # 大大减少了计算量 # 输入的为经过卷积的32个特征 nn.BatchNorm2d(32), # Dropout的是为了防止过拟合而设置 nn.Dropout(0.5), # drop 50% of the neuron # ReLU层 nn.ReLU(), # 池化层 # 池化核的大小位2x2 nn.MaxPool2d(2)) self.layer2 = nn.Sequential( nn.Conv2d(32, 64, kernel_size=3, padding=1), nn.BatchNorm2d(64), nn.Dropout(0.5), # drop 50% of the neuron nn.ReLU(), nn.MaxPool2d(2)) self.layer3 = nn.Sequential( nn.Conv2d(64, 64, kernel_size=3, padding=1), nn.BatchNorm2d(64), nn.Dropout(0.5), # drop 50% of the neuron nn.ReLU(), nn.MaxPool2d(2)) # 全连接层 # 全连接层在整个卷积神经网络起到“分类器”的作用。提取特征、进行分类。 self.fc = nn.Sequential( nn.Linear((captcha_setting.IMAGE_WIDTH//8)*(captcha_setting.IMAGE_HEIGHT//8)*64, 1024), nn.Dropout(0.5), # drop 50% of the neuron nn.ReLU()) self.rfc = nn.Sequential( nn.Linear(1024, captcha_setting.MAX_CAPTCHA*captcha_setting.ALL_CHAR_SET_LEN), ) def forward(self, x): out = self.layer1(x) out = self.layer2(out) out = self.layer3(out) out = out.view(out.size(0), -1) out = self.fc(out) out = self.rfc(out) return out 训练# -*- coding: UTF-8 -*- import torch import torch.nn as nn from torch.autograd import Variable import my_dataset from captcha_cnn_model import CNN # Hyper Parameters num_epochs = 300 batch_size = 1000 learning_rate = 0.001 # 选择MACBOOK M1 GPU device = torch.device("mps") def main(): # 创建一个CNN网络 cnn = CNN() cnn.train() print('init net') # 分类器 criterion = nn.MultiLabelSoftMarginLoss() # 优化器 optimizer = torch.optim.Adam(cnn.parameters(), lr=learning_rate) # Train the Model train_dataloader = my_dataset.get_train_data_loader() for epoch in range(num_epochs): for i, (images, labels) in enumerate(train_dataloader): images = Variable(images) labels = Variable(labels.float()) predict_labels = cnn(images) print(predict_labels.type) print(labels.type) loss = criterion(predict_labels, labels) optimizer.zero_grad() loss.backward() optimizer.step() if (i + 1) % 10 == 0: print("epoch:", epoch, "step:", i, "loss:", loss.item()) if (i + 1) % 1000 == 0: torch.save(cnn.state_dict(), "./model.pkl") # current is model.pkl print("save model") print("epoch:", epoch, "step:", i, "loss:", loss.item()) torch.save(cnn.state_dict(), "./model.pkl") # current is model.pkl print("save last model") if __name__ == '__main__': main()
2023年02月23日
763 阅读
0 评论
0 点赞
2022-09-21
机器学习-支持向量机(SVM)
SVM的历史1、支持向量机发展历史1963年,Vapnik在解决模式识别问题时提出了支持向量方法。起决定性作用的样本为支持向量1971年,Kimeldorf构造基于支持向量构建核空间的方法1995年,Vapnik等人正式提出统计学习理论。2、现状理论改进:模糊支持向量机最小二乘支持向量机加权支持向量机主动学习的支持向量机粗糙集与支持向量机的结合基于决策树的支持向量机分级聚类的支持向量机算法改进:对SVM算法问题的求解对SVM本身模型进行改造将SVM与具体问题相结合3、未来趋势目前支持向量机有着几方面的研究热点:核函数的构造和参数的选择;支持向量机从两类问题向多类问题的推广;更多的应用领域的推广;与目前其它机器学习方法的融合;与数据预处理(样本的重要度,属性的重要度,特征选择等)方面方法的结合,将数据中脱离领域知识的信息,即数据本身的性质融入支持向量机的算法中从而产生新的算法;支持向量机训练算法的探索。SVM讨论什么问题找到集合边缘上的若干数据 (称为支持向量),用这些点找出一个平面(称为决策面),使得支持向量到该平面的距离最大。距离的计算$$ \begin{cases} \omega_1 x_1 + \omega_2 x_2 +b = c\\ \omega_1 x_1 + \omega_2 x_2 +b = 0\\ \omega_1 x_1 + \omega_2 x_2 +b = -c\\ \end{cases} $$将c除到左边去$$ \begin{cases} \frac{\omega_1}{c}x_1 + \frac{\omega_2}{c}x_2 + \frac{b}{c} = 1\\ \frac{\omega_1}{c}x_1 + \frac{\omega_2}{c}x_2 + \frac{b}{c} = 0\\ \frac{\omega_1}{c}x_1 + \frac{\omega_2}{c}x_2 + \frac{b}{c} = -1\\ \end{cases} $$令${\omega_1}^{\prime} = \frac{\omega_1}{c}$,${\omega_2}^{\prime} = \frac{\omega_2}{c}$,${b}^{\prime} = \frac{b}{c}$,得到:$$ \begin{cases} {\omega_1}^{\prime} x_1 + {\omega_2}^{\prime} x_2 +b^{\prime} = 1\\ {\omega_1}^{\prime} x_1 + {\omega_2}^{\prime} x_2 +b^{\prime} = 0\\ {\omega_1}^{\prime} x_1 + {\omega_2}^{\prime} x_2 +b^{\prime} = -1\\ \end{cases} $$即:$$ \begin{cases} \omega_1 x_1 + \omega_2 x_2 +b = 1 \quad正超平面\\ \omega_1 x_1 + \omega_2 x_2 +b = 0 \quad超平面\\ \omega_1 x_1 + \omega_2 x_2 +b = -1 \quad负超平面\\ \end{cases} $$在$\omega_1 x_1 + \omega_2 x_2 +b = 1$线段取一点$X_m=(x_{1m} m,x_{2m})$在$\omega_1 x_1 + \omega_2 x_2 +b = -1$线段取一点$X_n=(x_{1n},x_{2n})$即:$$ \begin{cases} \omega_1 x_{1m} + \omega_2 x_{2m} +b = 1 \\ \omega_1 x_{1n} + \omega_2 x_{2n} +b = -1 \\ \end{cases} $$相减,得到$$ \omega_1 (x_{1m} - x_{1n}) + \omega_2 (x_{2m} - x_{2n}) = 2 $$即$$ \begin{pmatrix} \omega_1 & \omega_2 \end{pmatrix} \begin{pmatrix} x_{1m} - x_{1n}\\ x_{2m} - x_{2n} \end{pmatrix} = 2 $$$$ \omega \cdot \begin{pmatrix} X_m - X_n \end{pmatrix} = 2 $$在$\omega_1 x_1 + \omega_2 x_2 +b = 0$线段取一点$X_o$和$X_p$即:$$ \begin{cases} \omega_1 0_{1o} + \omega_2 x_{2o} +b = 0 \\ \omega_1 x_{1p} + \omega_2 x_{2p} +b = 0 \\ \end{cases} $$相减,得到:$$ \omega_1 (x_{1o} - x_{1p}) + \omega_2 (x_{20} - x_{2p}) = 0 $$即$$ \begin{pmatrix} \omega_1 & \omega_2 \end{pmatrix} \begin{pmatrix} x_{1o} - x_{1p}\\ x_{2o} - x_{2p} \end{pmatrix} = 0 $$$$ \omega \cdot \begin{pmatrix} X_o - X_p \end{pmatrix} = 0 $$可知$\omega$为$\omega x + b = 0$的法向量由$\omega \cdot\begin{pmatrix}X_m - X_n\end{pmatrix}= 2$,可得到:$$ \Vert \omega \Vert \cdot \Vert X_m - X_n \Vert cos\theta = 2 $$又因为$L = \Vert X_m - X_n \Vert cos\theta $,所以$L = \frac{2}{\Vert \omega \Vert}$数据标签定义令$$ \begin{cases} y_i = 1 \\ \omega \cdot x_i + b \geq 1 \\ \end{cases} $$$$ \begin{cases} y_i = -1 \\ \omega \cdot x_i + b \leq 1 \\ \end{cases} $$可以推出$$ y_i \cdot (\omega x_i + b) \geq 1 $$优化的目标归纳为:$$ \begin{cases} max_{\omega,b} \quad \frac{2}{\Vert \omega \Vert} \quad (\Vert \omega \Vert = \sqrt[2]{{\omega_1}^2+{\omega_2}^2}) \\ y_i \cdot (\omega x_i + b) - 1 \geq 0 \quad i=1,2,\ldots,n \\ \end{cases} $$序列最小最优化算法序列最小优化算法(Sequential minimal optimization, SMO)是一种用于解决支持向量机训练过程中所产生优化问题的算法。SMO由微软研究院的约翰·普莱特于1998年发明 [1] ,被广泛使用于SVM的训练过程中,并在通行的SVM库LIBSVM中得到实现 [2-3] 。1998年,SMO算法发表在SVM研究领域内引起了轰动,因为先前可用的SVM训练方法必须使用复杂的方法,并需要昂贵的第三方二次规划工具。而SMO算法较好地避免了这一问题 [4] 。SVM的对偶问题是有约束二次凸优化问题每次最少要调整两个变量$$ min \frac{1}{2}\sum_{i=1}^{N}\alpha_i \alpha_j y_i y_j K(x_i,x_j) - \sum_{i=1}^{N}\alpha_i s.t. \sum_{i=1}^{N}\alpha_i y_i = 0 \\ 0 \leq \alpha_i \leq C,i=1,2,\cdots,N $$
2022年09月21日
984 阅读
0 评论
0 点赞
2022-09-10
深度学习-线性代数基础
深度学习-线性代数基础1. 标量、向量、矩阵和张量标量(scalar)一个标量就是一个单独的数$$ a_{1} $$向量(vector)一个向量就是一列 有序排列 的数$$ \begin{bmatrix} {a_{1}}\\ {a_{2}}\\ {a_{3}}\\ \end{bmatrix} $$矩阵(matrix)一个矩阵就是一个二维数组$$ \begin{bmatrix} {a_{11}}&{a_{12}}&{a_{13}}\\ {a_{21}}&{a_{22}}&{a_{23}}\\ {a_{31}}&{a_{32}}&{a_{33}}\\ \end{bmatrix} $$张量(tensor)一般把超过二维的数组称为张量(说的就是张量就是个多维数组)更具体点,也即是说:把三维张量画成一个立方体:我们就可以进一步画出更高维的张量:2. 矩阵和向量相乘矩阵乘积两个矩阵A和B的矩阵乘积是第三个矩阵C$$ A_{m{\times}n}B_{n{\times}p}\ =\ C_{m{\times}p} $$矩阵乘法可以定义为:$$ C_{i,j}\ =\ \sum_{k}A_{i,k}B_{k,j} $$举个例子:$$ \begin{bmatrix} a_{11}&a_{12}\\ a_{21}&a_{22}\\ \end{bmatrix} \cdot \begin{bmatrix} b_{11}&b_{12}\\ b_{21}&b_{22}\\ \end{bmatrix} \ =\ \begin{bmatrix} {a_{11}{\cdot}b_{11}+a_{12}{\cdot}b_{21}}&{a_{11}{\cdot}b_{12}+a_{12}{\cdot}b_{22}}\\ {a_{21}{\cdot}b_{11}+a_{22}{\cdot}b_{21}}&{a_{21}{\cdot}b_{12}+a_{22}{\cdot}b_{22}}\\ \end{bmatrix} $$3. 单位矩阵和逆矩阵单位矩阵性质: 任意矩阵和单位矩阵相乘,得到的结果不变 。我们将保持n维向量不变的单位矩阵记作$I_{n}$举个例子($I_{3}$):$$ \begin{bmatrix} 1&0&0\\ 0&1&0\\ 0&0&1\\ \end{bmatrix} $$逆矩阵矩阵$A$的逆矩阵记作$A^{-1}$,其定义满足如下条件:$$ A^{-1}A\ =\ I_{n}\ =\ E $$4. 线性相关和生成子空间线性相关如果一组向量中其中一个向量能用这组向量的其他向量线性表示,则线性相关线性无关如果一组向量中其中一个向量不能用这组向量的其他向量线性表示,则线性无关生成子空间设$a_{1}$,$a_{2}$,$\cdots$$a_{s}$是$V$的一个向量组,令$W=\{ k_{1}a_{1}+\cdots+k_{ks}a_{s} \vert k_{1},\cdots, k_{s} \in K \} $ (K为数域)显然W是V的一个子集。由于$0=0a_{1}+\cdots+0a_{n} \in W$ 因此$W$是$V$的非空子集在W中任取两个元素,$k_{1}a_{1}+\cdots+k_{s}a_{s}$和$l_{1}a_{1}+\cdots+l_{s}a_{s}$,有两个相加:$(k_{1}a_{1}+\cdots+k_{s}a_{s})+(l_{1}a_{1}+\cdots+l_{s}a_{s})=(lk_{1})a_{1}+\cdots+(lk_{s})a_{s} \in W,\forall l \in K$因此W对于V的加法和数量乘法封闭,从而W是V的一个子空间。5. 范数范数通常用于评估模型的误差,向量中经常需要度量向量的长度,范数就是这样的一个函数,既然度量的是距离,那么函数值应该是大于等于0的。5.1 范数具有以下性质:规范是非负值。零向量的范数是0。向量之和的范数小于或等于这些向量的范数之和 $\Vert u+v \Vert = \Vert u \Vert + \Vert v \Vert$。向量的范数乘以标量等于该标量的绝对值乘以向量的范数$\Vert k \cdot u \Vert = \vert k \vert \cdot \Vert u \Vert$。5.2 范数的通用公式$$ \Vert x \Vert_{p} = (\sum_{i}\vert x_{i} \vert^p)^{\frac{1}{p}} $$公式计算步骤说明如下:计算每个元素的绝对值取这些绝对值的幂p将第2步的值求和取第三步结果的1/p次方。5.3 L2范数(欧几里得范数)欧几里得范数是 p=2 的 p 范数。是最为常用的范数。公式如下$$ \Vert x \Vert_2 = (\sum_{i}{{x_i}^2})^{\frac{1}{2}} = \sqrt[]{{\sum_{i}{{x_i}^2}}} $$6. 特殊类型的矩阵和向量对角矩阵只有主对角线上含有非零元素,其他位置都是零举个例子$$ \begin{bmatrix} 1&0&0\\ 0&1&0\\ 0&0&1\\ \end{bmatrix} $$对称矩阵转置和自己相等的矩阵单位向量是具有单位范式(unit norm)的向量。$$ {\Vert{x}\Vert}_{2}=1 $$正交矩阵指行向量和列向量是分别标准正交的方阵,即$$ A^{\top}A=AA^{\top}=I $$7. 特征分解特征值与特征向量方阵$A$的特征向量是指与$A$相乘后,相当于对该向量进行缩放的非零向量$\nu$:$$ A{\nu}={\lambda}{\nu} $$其中标量$\lambda$称为这个向量对应的特征值。其中标量$\nu$称为这个向量对应的特征向量。特征分解假设矩阵$A$有n个线性无关的特征向量$\{{{\nu}^{(1)},\cdots,{\nu}^{(n)}}\}$,对应特征值为$\{{\lambda_{1},\cdots,{\lambda}_{n}}\}$记:$V=[{{\nu}^{(1)},\cdots,{\nu}^{(n)}}]$,$\lambda=[{\lambda_{1},\cdots,{\lambda}_{n}}]^{\top}$因此$A$的特征分解为:$$ A=Vdiag(\lambda)V^{-1} $$8. 奇异值分解奇异值分解(Singular Value Decomposition)是线性代数中一种重要的矩阵分解,奇异值分解则是特征分解在任意矩阵上的推广。使用奇异值分解对矩阵进行分解, 能得到代表矩阵最本质变化的矩阵元素。这就好比一个合数能表示为若干质数之积, 分解合数能得到表示该合数的质因数。9. Moore-Penrose伪逆$$ A^+ = \lim _{\alpha \to 0} (A^TA + \alpha I)^{-1}A^T $$10. 迹运算迹运算返回的是矩阵对角元素的和:一个任意矩阵 的伪逆定义为,$$ Tr(A)=\sum_{i}A_{i,j} $$定义是定义,实际计算中,是使用这个公式$$ A^+ = VD^+U^T $$其中,矩阵 U,D,V 是矩阵 A 进行奇异值分解后得到的,对角矩阵 D 的伪逆 D+ 是其非零元素取倒数之后再转置得到的。
2022年09月10日
1,035 阅读
0 评论
0 点赞