矩阵乘法

[ch04-04] 多样本单特征值计算

梦想与她 提交于 2019-12-09 17:33:50
系列博客,原文在笔者所维护的github上: https://aka.ms/beginnerAI , 点击star加星不要吝啬,星越多笔者越努力。 4.4 多样本单特征值计算 在前面的代码中,我们一直使用单样本计算来实现神经网络的训练过程,但是单样本计算有一些缺点: 很有可能前后两个相邻的样本,会对反向传播产生相反的作用而互相抵消。假设样本1造成了误差为0.5,w的梯度计算结果是0.1;紧接着样本2造成的误差为-0.5,w的梯度计算结果是-0.1,那么前后两次更新w就会产生互相抵消的作用。 在样本数据量大时,逐个计算会花费很长的时间。由于我们在本例中样本量不大(200个样本),所以计算速度很快,觉察不到这一点。在实际的工程实践中,动辄10万甚至100万的数据量,轮询一次要花费很长的时间。 如果使用多样本计算,就要涉及到矩阵运算了,而所有的深度学习框架,都对矩阵运算做了优化,会大幅提升运算速度。打个比方:如果200个样本,循环计算一次需要2秒的话,那么把200个样本打包成矩阵,做一次计算也许只需要0.1秒。 下面我们来看看多样本运算会对代码实现有什么影响,假设我们一次用3个样本来参与计算,每个样本只有1个特征值。 4.4.1 前向计算 由于有多个样本同时计算,所以我们使用 \(x_i\) 表示第 \(i\) 个样本,X是样本组成的矩阵,Z是计算结果矩阵,w和b都是标量: \[ Z =

垒骰子---蓝桥杯---矩阵快速幂---C++

半城伤御伤魂 提交于 2019-12-09 14:18:14
题目描述: 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。 假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。 atm想计算一下有多少种不同的可能的垒骰子方式。 两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。 由于方案数可能过多,请输出模 10^9 + 7 的结果。 不要小看了 atm 的骰子数量哦~ 「输入格式」 第一行两个整数 n m n表示骰子数目 接下来 m 行,每行两个整数 a b ,表示 a 和 b 数字不能紧贴在一起。 「输出格式」 一行一个数,表示答案模 10^9 + 7 的结果。 「样例输入」 2 1 1 2 「样例输出」 544 「数据范围」 对于 30% 的数据:n <= 5 对于 60% 的数据:n <= 100 对于 100% 的数据:0 < n <= 10^9, m <= 36 思路 一开始完全不知道矩阵快速幂有什么用,直到昨天吃了亏,果然,还是刷题刷的少啊,我的线代真是学了浪费= =。 通过邻接矩阵来保存第一个骰子到第n个骰子两个状态的连通性即可能性, 通过矩阵乘法来实现状态堆积

论文笔记(一)SecureML: A System for Scalable Privacy-Preserving Machine Learning

风格不统一 提交于 2019-12-08 20:57:38
SecureML:A system for Scalable Privacy-Preserving Machine Learning 1 摘要及介绍 1.1 模型的大致架构 首先,主要模型中主要有客户端和两台服务器,假设这两台服务器不会恶意合作。   整个训练过程大致分为在线和离线两个阶段,在线阶段的主要任务就是利用本文提出的安全算数技术在共享的十进制数上进行模型的更新,根据混淆电路的思想,除了最后能得到的模型,什么数据也不会暴露出来;离线阶段的主要任务是服务于在线阶段的乘法运算——利用线性同态加密或者不经意传输生成必要的三元组,因为这个开销比较大,后期还提出了一种改进,用客户端来辅助生成三元组; 1.2 主要贡献 为线性回归、逻辑回归、神经网络这三种机器学习算法开发出了新型的隐私保护的深度学习协议 开发出了支持在共享的十进制数上的安全算数操作的技术 对于那些非线性激活函数,如sigmoid softmax,提出了一种支持安全多方计算的替代方案 以上提出的所有技术相较于目前的技术,在保证安全的前提下,速度上都有很大的提升 1.2.1 为三种机器学习算法开发出的隐私保护的协议 线性回归、逻辑回归和神经网络这三种机器学习方案非常简单但也非常常用,而且他们之间思想类似且一种递进的趋势。 所谓思想类似指的是他们都是有监督的机器学习算法,思路都是先前馈,算出交叉熵之后,在利用随机梯度下降

平面坐标变换 矩阵形式

最后都变了- 提交于 2019-12-07 22:24:32
转 http://learn.gxtc.edu.cn/NCourse/jxcamcad/cadcam/Mains/main11-2.htm 2.3.3 基本二维变换 基本二维变换有比例变换(Scaling)、旋转变换(Rotating)、错切变换(Shearing)和平移变换(Translating)。 1)比例变换 比例变换就是将平面上任意一点的横坐标放大或缩小S11倍,纵坐标放大或缩小S22倍,即 其中S称为比例变换矩阵。图2.24是比例变换的几个例子。图中(b)是S11=S22的情况,(C)是S11≠S21的情况 2)旋转变换 旋转变换就是将平面上任意一点绕原点旋转θ角,一般规定逆时针方向为正,顺时针方向为负。从图2.25可推出变换公式: 3)错切变换 在旋转变换矩阵中,非对角线元素有何几何意义?观察图2.26中的例子。变换矩阵中元素S21起作把图形沿X方向“错切”的作用,Y值越小,错切量越小。S12则有将图形向Y方向“错切”的作用,同样其作用的大小与X值成正比。 4)平移变换 平移交换指的是将平面上任意一点沿X方向移动C。,沿Y方向移动ty(图2.27),其变换公式为 由上式可见,平移交换不能直接用2X2矩阵来表示。下述齐次坐标变换矩阵则可解决这个问题。 注意:这句话关键(疑问点在于为什么二位转换需要3x3的矩阵) 2.3.4 齐次坐标 如把平面上的点P=[Xy

python scipy 稀疏矩阵详解

核能气质少年 提交于 2019-12-07 22:20:15
文章目录 稀疏矩阵格式 coo_matrix csr_matrix csc_matrix lil_matrix dok_matrix dia_matrix bsr_matrix 实用函数 经验总结 稀疏矩阵格式 coo_matrix    coo_matrix 是最简单的稀疏矩阵存储方式,采用三元组 (row, col, data) (或称为 ijv format )的形式来存储矩阵中非零元素的信息。在实际使用中,一般 coo_matrix 用来创建矩阵,因为 coo_matrix 无法对矩阵的元素进行增删改操作;创建成功之后可以转化成其他格式的稀疏矩阵(如 csr_matrix 、 csc_matrix )进行转置、矩阵乘法等操作。 ​ coo_matrix 可以通过四种方式实例化,除了可以通过 coo_matrix(D) , D代表密集矩阵; coo_matrix(S) , S代表其他类型稀疏矩阵或者 coo_matrix((M, N), [dtype]) 构建一个shape为M*N的空矩阵,默认数据类型是 d ,还可以通过 (row, col, data) 三元组初始化: >> > import numpy as np >> > from scipy . sparse import coo_matrix >> > _row = np . array ( [ 0 , 3 , 1

算法笔记——【动态规划】矩阵连乘问题

自古美人都是妖i 提交于 2019-12-07 04:43:51
问题描述 :给定n个矩阵:A 1 ,A 2 ,...,A n ,其中A i 与A i+1 是可乘的,i=1,2...,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数。 问题解析 :由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序。这种计算次序可以用加括号的方式来确定。若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号,则可以依此次序反复调用2个矩阵相乘的标准算法计算出矩阵连乘积。 完全加括号的矩阵连乘积可递归地定义为: (1)单个矩阵是完全加括号的; (2)矩阵连乘积A是完全加括号的,则A可表示为2个完全加括号的矩阵连乘积B和C的乘积并加括号,即A=(BC) 例如,矩阵连乘积A 1 A 2 A 3 A 4 有5种不同的完全加括号的方式:(A 1 (A 2 (A 3 A 4 ))),(A 1 ((A 2 A 3 )A 4 )),((A 1 A 2 )(A 3 A 4 )),((A 1 (A 2 A 3 ))A 4 ),(((A 1 A 2 )A 3 )A 4 )。每一种完全加括号的方式对应于一个矩阵连乘积的计算次序,这决定着作乘积所需要的计算量。 看下面一个例子,计算三个矩阵连乘{A 1 ,A 2 ,A 3 };维数分别为10*100

矩阵特征值分解与奇异值分解含义解析及应用

ぃ、小莉子 提交于 2019-12-06 22:03:10
特征值与特征向量的几何意义 矩阵的乘法是什么,别只告诉我只是“前一个矩阵的行乘以后一个矩阵的列”,还会一点的可能还会说“前一个矩阵的列数等于后一个矩阵的行数才能相乘”,然而,这里却会和你说——那都是表象。 矩阵乘法真正的含义是变换,我们学《线性代数》一开始就学行变换列变换,那才是线代的核心——别会了点猫腻就忘了本——对,矩阵乘法 就是线性变换,若以其中一个向量A为中心,则B的作用主要是使A发生如下变化: 1、伸缩 clf; A = [0, 1, 1, 0, 0;... 1, 1, 0, 0, 1]; % 原空间 B = [3 0; 0 2]; % 线性变换矩阵 plot(A(1,:),A(2,:), '-*');hold on grid on;axis([0 3 0 3]); gtext('变换前'); Y = B * A; plot(Y(1,:),Y(2,:), '-r*'); grid on;axis([0 3 0 3]); gtext('变换后'); 从上图可知,y方向进行了2倍的拉伸,x方向进行了3倍的拉伸,这就是B=[3 0; 0 2]的功劳,3和2就是伸缩比例。请注意,这时B除了对角线元素为各个维度的倍数外,非正对角线元素都为0,因为下面将要看到,对角线元素非0则将会发生切变及旋转的效果。 2、切变 clf; A = [0, 1, 1, 0, 0;... 1, 1, 0

深度学习理论之数学基础

一笑奈何 提交于 2019-12-06 16:34:28
一、线性代数 1.1 标量、向量、矩阵和张量 标量 :一个单独的数 向量 :一列数,一维数组 矩阵 :二维数组 张量:超过二维的数组 转置: 以对角线为轴的镜像。 1.2 矩阵和向量相乘 矩阵乘法 :两个矩阵A和B的矩阵乘积(matrix product)是第三个矩阵 C。为了使乘法定义良好,矩阵 A 的列数必须和矩阵 B 的行数相等。如果矩阵 A 的形状是 m × n,矩阵 B 的形状是 n × p,那么矩阵C 的形状是 m × p 点积: 1.3 单位矩阵和逆矩阵 单位矩阵:所有沿主对角线的元素都是 1,而所有其他位置的元素都是0,计作: 逆矩阵: 求逆矩阵的条件: 矩阵A必须是一个 方阵(square),即 m = n,并且所有列向量都是线性无关的。一个列向量线性相关的方阵被称为 奇异的 (singular)。 1.4 范数 L 2 范数: 当 p = 2 时,L2 范数被称为 欧几里得范数(Euclidean norm)。它表示从原点出发到向量 x 确定的点的欧几里得距离。L2 范数在机器学习中出现地十分频繁,经常简化表示为 ∥x∥,略去了下标 2。平方 L 2 范数也经常用来衡量向量的大小. L 1 范数: 当机器学习问题中零和非零元素之间的差异非常重要时,通常会使用 L 1 范数 Frobenius 范数: 有时候我们可能也希望衡量矩阵的大小。 1.5

深度学习入门之数学基础概念

独自空忆成欢 提交于 2019-12-06 16:33:48
深度学习之线代复习 标量、向量、矩阵和张量 标量(scalar):一个标量就是一个单独的数。 向量:一个向量是一列数,这些数是有序排列的。我们可以把向量看作空间中的点,每个元素是不同坐标轴上的坐标。 矩阵:矩阵是一个二维数组,其中的每一个元素被两个索引(而非 一个)所确定。 张量(tensor):在某些情况下,我们会讨论坐标超过两维的数组。一般地,一 个数组中的元素分布在若干维坐标的规则网格中,我们称之为张量。 矩阵的向量相乘 在深度学习中, 我们也使用一些不那么常规的符号。我们允许矩阵和向量相 加,产生另一个矩阵:C = A + b,其中 C i , j C_{i,j} C i , j ​ = A i , j A_{i,j} A i , j ​ + b j b_j b j ​ 。换言之,向量 b 和矩阵 A 的每一行相加。这个简写方法使我们无需在加法操作前定义一个将向量 b 复制 到每一行而生成的矩阵。这种隐式地复制向量 b 到很多位置的方式,被称为广播。 A ⊙ B(dot product)被称为元素对应乘积(element-wise product)或者Hadamard乘积(Hadamard product) 矩阵乘积满足分配律,结合率,但不一定满足AB=BA的交换律。 单位矩阵和逆矩阵 任意 向量和单位矩阵相乘,都不会改变。我们将保持 n 维向量不变的单位矩阵记作 I n

深度学习涉及的数学知识

与世无争的帅哥 提交于 2019-12-06 16:31:50
向量 在线性代数中,标量(Scalar)是一个实数,而向量(Vector)是指n 个实数组成的有序数组,称为n 维向量。如果没有特别说明,一个n 维向量一般表示列向量,即大小为n *1 的矩阵。 向量符号一般用黑体小写字母a,b,c或小写希腊字母 等来表示。 常用的向量 矩阵运算 常见的矩阵 导数 向量的导数 导数法则 加减法则 乘法法则 链式法则 常见的向量和矩阵的导数 来源: CSDN 作者: perfectzq 链接: https://blog.csdn.net/perfectzq/article/details/71373304