矩阵乘法

涨姿势!一文了解深度学习中的注意力机制

早过忘川 提交于 2019-12-25 16:39:20
全文共 11413 字,预计学习时长 33 分钟 图源:Unsplash “每隔一段时间,就会出现一种能改变一切的革命性产品。” ——史蒂夫·乔布斯(SteveJobs) 这句21世纪最知名的言论之一与深度学习有什么关系呢? 想想看。计算能力的提升带来了一系列前所未有的突破。 若要追根溯源,答案将指向注意力机制。简而言之,这一全新概念正在改变我们应用深度学习的方式。 图源:Unsplash 注意力机制是过去十年中,深度学习研究领域最具价值的突破之一。 它催生了包括Transformer架构和Google的BERT在内的自然语言处理(NLP)领域的许多近期突破。如果你目前(或打算)从事NLP相关工作,一定要了解什么是注意力机制及其工作原理。 本文会讨论几种注意力机制的基础、流程及其背后的基本假设和直觉,并会给出一些数学公式来完整表达注意力机制,以及能让你在Python中轻松实现注意力相关架构的代码。 大纲 l 注意力机制改变了我们应用深度学习算法的方式 l 注意力机制彻底改变了自然语言处理(NLP)甚至计算机视觉等领域 l 本文将介绍注意力机制在深度学习中的工作原理,以及如何用Python将其实现 目录 1.什么是注意力? 1. 深度学习是如何引入注意力机制的 2. 了解注意力机制 2.使用Keras在Python中实现简单的注意力模型 3.全局与局部注意力 4

SVD分解技术详解

时光总嘲笑我的痴心妄想 提交于 2019-12-25 15:58:11
版权声明: 本文由LeftNotEasy发布于 http://leftnoteasy.cnblogs.com , 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系 wheeleast@gmail.com 前言: 上一次写了关于 PCA与LDA 的文章,PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的。在上篇文章中便是基于特征值分解的一种解释。特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中。而且线性代数或者矩阵论里面,也很少讲任何跟特征值与奇异值有关的应用背景。奇异值分解是一个有着很明显的物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性。就像是描述一个人一样,给别人描述说这个人长得浓眉大眼,方脸,络腮胡,而且带个黑框的眼镜,这样寥寥的几个特征,就让别人脑海里面就有一个较为清楚的认识,实际上,人脸上的特征是有着无数种的,之所以能这么描述,是因为人天生就有着非常好的抽取重要特征的能力,让机器学会抽取重要的特征,SVD是一个重要的方法。 在机器学习领域,有相当多的应用与奇异值都可以扯上关系,比如做feature reduction的PCA,做数据压缩(以图像压缩为代表)的算法,还有做搜索引擎语义层次检索的LSI(Latent Semantic

矩阵快速幂

折月煮酒 提交于 2019-12-25 03:30:02
矩阵快速幂 顾名思义,矩阵快速幂可以 简单理解 为在矩阵上实现 快速幂操作 并且达到一定的目的。 但是,矩阵快速幂很抽象,本文将分为以下部分进行介绍: 1.矩阵乘法(了解矩阵乘法的可以跳过) 2.引入及算法实现 3.应用 1.矩阵乘法 我们定义一个有 M * N 个数排列的 M 行 N 列的矩阵 , 简称 M * N 的矩阵 e.g.一个 2 * 3 的矩阵 1 3 3 2 1 8 对于 矩阵加法 ,只能是 两个大小相同 的矩阵相加(及 M = M· && N = N·) 这个很好理解,但对于 矩阵乘法 ,就相对复杂。 矩阵乘法只适用于 第一个矩阵的 列数 和 第二个矩阵的 行数 相等时,才能相乘。 如: A矩阵 2 行 3 列 , B 矩阵 3 行 2 列 ,答案矩阵 2 行 2 列 。 简单来说,既是 C 矩阵的行数由 A 矩阵行数决定 , C 矩阵的列数由 B 矩阵列数决定。 C中每一个值运算方法如下: C中第 i 行 j 列 元素 = ( k 属于 1 ~ A的列数 ) A中第 i 行 k 列 元素 * B中第 k 行 j 列 元素 之和。 有一种特殊的矩阵:单位矩阵,它从左上角到右下角的对角线上的元素均为1,除此以外全都为0。它在矩阵乘中相当于数乘中的1,即任何矩阵乘它都等于本身。 顺便提一下,矩阵乘法满足结合律,分配律,但不满足交换律(定义条件不符合) 2

2019年8月19日矩阵

浪子不回头ぞ 提交于 2019-12-23 19:00:27
矩阵 相乘最重要的方法是一般矩阵 乘积 。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 [1] 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。 定义 设 A 为 的矩阵, B 为 的矩阵,那么称 的矩阵 C 为矩阵 A 与 B 的乘积,记作 ,其中矩阵C中的第 行第 列元素可以表示为: 如下所示: 注意事项 当矩阵A的列数等于矩阵B的行数时,A与B可以相乘。 矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。 乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。 基本性质 乘法结合律: ( AB ) C = A ( BC ). [2] 乘法左分配律:( A + B ) C = AC + BC [2] 乘法右分配律: C ( A + B )= CA + CB [2] 对数乘的结合性 k ( AB )=( kA ) B = A ( kB ). 转置 ( AB ) T= B T A T. 矩阵乘法一般不满足交换律 [3] 。 乘积-哈达马积( hadamard product) 矩阵 与 矩阵 的Hadamard积记为 。其元素定义为两个矩阵对应元素的乘积 的 m×n 矩阵 [2] 。例如,

用tensorflow实现SVM

旧巷老猫 提交于 2019-12-23 18:46:36
环境配置 win10 Python 3.6 tensorflow1.15 scipy matplotlib (运行时可能会遇到module tkinter的问题) sklearn 一个基于Python的第三方模块。sklearn库集成了一些常用的机器学习方法。 代码实现 import matplotlib.pyplot as plt import numpy as np import tensorflow as tf from sklearn import datasets from tensorflow.python.framework import ops ops.reset_default_graph() sess = tf.Session() Session API Session的详细作用 Session是tensorflow中的一个执行OP和计算tensor的一个类。 framework API 补充: 张量(tensor):TensorFlow程序使用tensor数据结构来代表所有的数据,计算图中,操作间传递的数据都是tensor,你可以把TensorFlow tensor看做一个n维的数组或者列表。 变量(Var iable):常用于定义模型中的参数,是通过不断训练得到的值。比如权重和偏置。 占位符(placeholder):输入变量的载体

奇异值分解(SVD)原理及应用

若如初见. 提交于 2019-12-23 13:45:11
一、奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧: 1)特征值: 如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式: 这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式: 其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。我这里引用了一些参考文献中的内容来说明一下。首先,要明确的是,一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵: 它其实对应的线性变换是下面的形式: 因为这个矩阵M乘以一个向量(x,y)的结果是: 上面的矩阵是对称的,所以这个变换是一个对x,y轴的方向一个拉伸变换(每一个对角线上的元素将会对一个维度进行拉伸变换,当值>1时,是拉长,当值<1时时缩短),当矩阵不是对称的时候,假如说矩阵是下面的样子: 它所描述的变换是下面的样子:   这其实是在平面上对一个轴进行的拉伸变换(如蓝色的箭头所示),在图中,蓝色的箭头是一个最主要的变化方向(变化方向可能有不止一个),如果我们想要描述好一个变换

矩阵运算

亡梦爱人 提交于 2019-12-23 11:21:45
二、 矩阵运算 1. 什么是矩阵 矩阵就是由多组数据按方形排列的阵列,在 3D 运算中一般为方阵,即 M*N ,且 M=N ,使用矩阵可使计算坐标 3D 坐标变得很方便快捷。下面就是一个矩阵的实例: 看似没什么特殊的,可是后面你可以看到矩阵的魅力,为什么矩阵这么有效,我也不知道,这个由数学家去论述,我们只要可以用就是了。 2. 向量的点乘和叉乘 向量的点乘和叉乘与矩阵一样是数学定义,点乘在矩阵运算中起到很重要的作用,称为内积,叉乘称为外积,通过叉乘运算可以计算出一个向量,该向量垂直于由两个向量构成的平面,该向量也称为该平面的法线。这两个计算方法在 3D 运算中的作用就是向量计算工具。 l 点乘公式 其实就是两个向量的各分量相乘后形成新的向量 l 叉乘公式 Uc=U1* U2 两个向量进行叉乘的矩阵如下: 其中 x1 , y1 , z1 以及 x2 , y2 , z2 分别为向量 U1 和 U2 的分量,设 UC 为叉乘的向量积,其计算公式如下: 3. 三维几何变换矩阵 几何绘图中,常常需要将一个模型从一个位置移动到另一个位置,或者将模型进行缩放旋转,称为几何变换。每个模型都存在一个局部的坐标系,在制作模型的时候是不考虑模型在场景中的具体位置的,模型中的所有顶点的坐标值都相对于局部坐标系,而模型在应用中会发生很多变化,其中大部分情况都是由多种变化复合的结果,这些变化涉及很多复杂的运算

面试官问你斐波那契数列的时候不要高兴得太早

£可爱£侵袭症+ 提交于 2019-12-23 02:11:17
原文地址:https://www.yanbinghu.com/2019/01/07/16863.html 前言 假如面试官让你编写求斐波那契数列的代码时,是不是心中暗喜?不就是递归么,早就会了。如果真这么想,那就危险了。 递归求斐波那契数列 递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。 斐波那契数列的计算表达式很简单: F(n) = n; n = 0,1F(n) = F(n-1) + F(n-2),n >= 2; 因此,我们能很快根据表达式写出递归版的代码: /*fibo.c*/#include <stdio.h>#include <stdlib.h>/*求斐波那契数列递归版*/unsigned long fibo(unsigned long int n){ if(n <= 1) return n; else return fibo(n-1) + fibo(n-2);}int main(int argc,char *argv[]){ if(1 >= argc) { printf("usage:./fibo num\n"); return -1; } unsigned long n = atoi(argv[1]); unsigned long fiboNum = fibo(n); printf("the %lu result is %lu\n",n

机器学习数学基础-线性代数

≡放荡痞女 提交于 2019-12-23 00:04:45
前言 AI(人工智能)现在火的一塌糊涂,其实在AI领域,机器学习已广泛应用在搜索引擎、自然语言处理、计算机视觉、生物特征识别、医学诊断、证券市场分析等领域,并且机器学习已经是各大互联网公司的基础设施,不再是一个新鲜的技术。但当你真的开始学习机器学习的时候,就会发现上手门槛其实还挺高的,这主要是因为机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。 本文主要介绍一下机器学习涉及到的一些最常用的的数学知识,方便大家在学习机器学习的时候,能扫除一些基础障碍。 标量(scalar) 标量是一个单独的数,一般用普通小写字母或希腊字母表示,如 等。 向量(vector)相关 向量的定义 把数排成一列就是向量,比如: 向量一般用粗体小写字母或粗体希腊字母表示,如 等(有时候也会用箭头来标识,如 ),其元素记作 。 向量默认为列向量,行向量需要用列向量的转置表示,例如 等。 物理专业视角:向量是空间中的箭头,决定一个向量的是它的长度和方向 计算机专业视角:向量是有序的数字列表 数学专业视角:向量可以是任何东西,只要保证两个向量相加以及数字与向量相乘是有意义的即可 运算规则 向量的加法和数量乘法定义: 加法 相同维数的向量之间的加法为: 数量乘法 任意的常数 和向量的乘法为: 在给定数 及向量 的情况下 张成空间 张成空间是向量 和

机器学习 回归问题(线性回归 岭回归 逐步回归)

╄→尐↘猪︶ㄣ 提交于 2019-12-21 19:56:51
一.线性回归 线性回归就是将输入项分别乘以一些常量,在将结果加起来得到输出。 假定输入数据存放在矩阵 x 中,而回归系数存放在向量 w 中。 那么预测结果可以通过Y=X的转置*W得出。所以我们求解线性回归模型的核心就在于求解w,如何求呢?首先,我们一定是希望预测出来的值和实际值之间的误差越小越好,所以我们评判w好坏,就可以采用实际值与真实值之差表示,但是这个差有正有负,为了避免正负相互抵消的情况,我们采用平方误差(也就是最小二乘法) 平方误差,我们也可以叫他损失函数。我们现在就是要以w为变量求解损失函数的最小值。 我们可以对w进行求导,令其为0,可得到我们所要求解w所需的计算公式。 局部加权线性回归 线性回归的一个问题是有可能出现欠拟合现象,因为它求的是具有小均方误差的无偏估 计。显而易见,如果模型欠拟合将不能取得好的预测效果。所以有些方法允许在估计中引入一 些偏差,从而降低预测的均方误差。 其中的一个方法是局部加权线性回归。在该算法中,我们给待预测点附近的每个点赋予一定的权重;在这个子集上基于 小均方差来进行普通的回归。 局部加权线性回归的基本思想:设计代价函数时,待预测点附近的点拥有更高的权重,权重随着距离的增大而缩减——这也就是名字中“局部”和“加权”的由来。 权重如何求取: 区别在于此时的代价函数中多了一个权重函数W,这个W要保证,越靠近待测点附近权值越大