自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

冯·诺依曼

If people do not believe that mathematics is simple, it is only because they do not realize how complicated life is.

  • 博客(21)
  • 收藏
  • 关注

原创 机器学习中的数学——特殊类型的向量和矩阵

分类目录:《算法设计与分析》总目录有些特殊类型的向量和矩阵是特别有用的,本文将介绍它们。对角矩阵对角矩阵指只在主对角线上含有非零元素,其他位置都是零。形式上,矩阵DDD是对角矩阵,当且仅当对于所有的i≠ji\neq ji​=j我们有Di,j=0D_{i, j}=0Di,j​=0。前文我们已经看到过一个对角矩阵:单位矩阵,对角元素全部是1。我们用diag(v)diag(v)diag(v)表示一个对角元素由向量vvv中元素给定的对角方阵。对角矩阵受到关注的部分原因是对角矩阵的乘法计算很高效。计算乘法

2021-09-30 22:54:56 11292

原创 机器学习中的数学——范数

分类目录:《算法设计与分析》总目录有时我们需要衡量一个向量的大小。在机器学习中,我们经常使用被称为范数的函数衡量向量大小。形式上,LPL^PLP范数定义如下

2021-09-27 21:43:55 14214

原创 机器学习中的数学——线性相关和生成子空间

分类目录:《算法设计与分析》总目录如果逆矩阵A−1A^{-1}A−1存在,我们在《机器学习中的数学——单位矩阵和逆矩阵》中可以得到:Ax=bAx=bAx=b对于每一个向量bbb恰好存在一个解。但是,对于方程组而言,对于向量bbb的某些值,有可能不存在解,或者存在无限多个解。存在多于一个解但是少于无限多个解的情况是不可能发生的;因为如果xxx和yyy都是某方程组的解,则z=αx+(1−α)yz=\alpha x+(1-\alpha)yz=αx+(1−α)y(其中α\alphaα取任意实数)也是该方程组的解

2021-09-26 21:12:52 16530 2

原创 机器学习中的数学——单位矩阵和逆矩阵

线性代数提供了被称为矩阵逆的强大工具。对于大多数矩阵A,我们都能通过矩阵逆解析地求解方程组:Ax=bAx=bAx=b为了描述矩阵逆,我们首先需要定义单位矩阵的概念。任意向量和单位矩阵相乘,都不会改变。我们将保持nnn维向量不变的单位矩阵记作InI_nIn​形式上,IN∈Rn×nI_N\in R^{n\times n}IN​∈Rn×n:∀x∈R:Inx=x\forall x\in R:I_nx=x∀x∈R:In​x=x单位矩阵的结构很简单:所有沿主对角线的元素都是1,而所有其他位置的元素都是0:[1

2021-09-25 22:50:19 14526

原创 机器学习中的数学——矩阵和向量相乘

分类目录:《算法设计与分析》总目录矩阵乘法是矩阵运算中最重要的操作之一。两个矩阵AAA和BBB的矩阵乘积是第三个矩阵CCC。为了使乘法定义良好,矩阵AAA的列数必须和矩阵BBB的行数相等。如果矩阵AAA的形状是m×nm\times nm×n,矩阵BBB的形状是n×pn\times pn×p,那么矩阵CCC的形状是m×pm\times pm×p。我们可以通过将两个或多个矩阵并列放置以书写矩阵乘法:C=ABC=ABC=AB具体地,该乘法操作定义为:Ci,j=∑kAi,k×Bk,jC_{i, j}=\s

2021-09-25 21:01:23 14196

原创 机器学习中的数学——线性代数基础及量的表示

分类目录:《算法设计与分析》总目录线性代数作为数学的一个分支,广泛应用于科学和工程中。然而,因为线性代数主要是面向连续数学,而非离散数学,所以很多计算机科学家很少接触它。掌握好线性代数对于理解和从事机器学习算法相关工作是很有必要的,尤其对于深度学习算法而言。量的表示学习线性代数,会涉及以下几类数学概念:标量:一个标量就是一个单独的数,它不同于线性代数中研究的其他大部分对象,标量通常被赋予小写的变量名称。当我们介绍标量时,会明确它们是哪种类型的数。比如,在定义实数标量时,我们可能会说“令s∈Rs\

2021-09-25 17:34:03 13172 2

原创 算法设计与分析——顺序统计量:最坏情况为线性时间的选择算法

我们现在来看一个最坏情况运行时间为O(n)O(n)O(n)的选择算法。像randomized_select(arr, low, high, i)一样, 下文所述的选择算法通过对输入数组的递归划分来找出所需元素,但是,在该算法中能够保证得到对数组的一个好的划分。 SELECT使用的也是来自快速排序的确定性划分算法 PARTITION(见7.1节),但做了修改,把划分的主元也作为输入参数。通过执行下列步骤,算法 SELECT可以确定一个有n>1个不同元素的输入数组中第i小的元素。(如果n=1,则 SE

2021-09-25 16:14:15 13139

原创 算法设计与分析——顺序统计量:期望为线性时间的选择算法

一般选择问题看起来要比找最小值这样的简单问题更难。但令人惊奇的是,这两个问题的渐近运行时间却是相同的:Θ(n)\Theta(n)Θ(n)。本文将介绍一种解决选择问题的分治算法。randomized_select(arr, low, high, i)算法是以《排序算法:快速排序-[基础知识]》中的快速排序算法为模型的。与快速排序一样,我们仍然将输入数组进行递归划分。但与快速排序不同的是,快速排序会递归处理划分的两边,而randomized_select(arr, low, high, i)只处理划分的一边。

2021-09-25 14:04:51 13487

原创 算法设计与分析——顺序统计量:最大值与最小值

在一个有nnn个元素的集合中,我们可以很容易地给出n−1n-1n−1次比较这个上界来确定其最小元素:依次遍历集合中的每个元素,并记录下当前最小元素。当然,最大值也可以通过n−1n-1n−1次比较找出来。这的确就是我们能得到的最好结果吗。对于确定最小值问题,我们可以得到其下界就是O(n)O(n)O(n)次比较。对于任意一个确定最小值的算法,可以把它看成是在各元素之间进行的一场锦标赛。每次比较都是锦标赛中的一场比赛,两个元素中较小的获胜。需要注意的是,除了最终获胜者以外,每个元素都至少要输掉一场比赛。因此,我

2021-09-19 21:13:00 14057

原创 算法设计与分析——排序算法:十大排序算法总结

排序算法我们已经通过前序文章全部详细说明了,值的一提的是,我们说述的排序算法都指代的是内部排序算法。而实际上,排序算法可以分为内部排序和外部排序。内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等,这些算法我们在前序文章都意义详细的阐述了,现用一张图概括前序文章的十大排序算法:...

2021-09-19 18:01:42 13925

原创 算法设计与分析——排序算法(十):桶排序

桶排序假设输入数据服从均匀分布,平均情况下它的时间代价为O(n)O(n)O(n)。与计数排序类似,因为对输入数据作了某种假设,桶排序的速度也很快。具体来说,计数排序假设输入数据都属于一个小区间内的整数,而桶排序则假设输入是由一个随机过程产生,该过程将元素均匀、独立地分布在[0,1)[0, 1)[0,1)区间上。桶排序将[0,1)[0, 1)[0,1)区间划分为nnn个相同大小的子区间,或称为桶。然后,将nnn个输入数分别放到各个桶中。因为输入数据是均匀、独立地分布在[0,1)[0, 1)[0,1)区间上,

2021-09-19 15:07:53 14367

原创 算法设计与分析——排序算法(九):基数排序

基数排序是一种用在卡片排序机上的算法,现在你只能在博物馆找到这种卡片排序机了。博物馆中的一张卡片有80列,在每一列上机器可以选择在12个位置中的任一处穿孔。通过机械操作,我们可以对排序机“编程”来检查每个卡片中的给定列,然后根据穿孔的位置将它们分别放人12个容器中。操作员就可以逐个容器地来收集卡片,其中第一个位置穿孔的卡片在最上面,其次是第二个位置穿孔的卡片,依此类推。对十进制数字来说,每列只会用到10个位置(另两个位置用于编码非数值字符)。一个ddd位数将占用ddd列。因为卡片排序机一次只能查看一列,所

2021-09-19 14:32:01 10971

原创 算法设计与分析——排序算法(八):计数排序

计数排序假设nnn个输入元素中的每一个都是在000到kkk区间内的一个整数,其中kkk为某个整数。当k=O(n)k=O(n)k=O(n)时,排序的运行时间为Θ(n)\Theta(n)Θ(n)。计数排序的基本思想是:对每一个输入元素xxx,确定小于xxx的元素个数。利用这一信息,就可以直接把xxx放到它在输出数组中的位置上了。例如,如果有17个元素小于xxx,则xxx就应该在第18个输出位置上。当有几个元素相同时,这一方案要略做修改。因为不能把它们放在同一个输出位置上。在计数排序算法的代码中,假设输入是一

2021-09-05 21:53:10 19345 3

原创 算法设计与分析——排序算法:比较排序算法的下界

我们在《排序算法》系列的开头介绍了几种能在O(nlg⁡n)O(n\lg n)O(nlgn)时间内排序nnn个数的算法。归并排序和堆排序达到了最坏情况下的上界;快速排序在平均情况下达到该上界。而且,对于这些算法中的每个,我们都能给出nnn个输入数值,使得该算法能在Ω(nlg⁡n)\Omega(n\lg n)Ω(nlgn)时间内完成。《排序算法》的1-7节的算法都有一个有趣的性质:在排序的最终结果中,各元素的次序依赖于它们之间的比较。我们把这类排序算法称为比较排序。下文将证明对包含nnn个元素的输入序列来说

2021-09-05 16:17:33 12750

原创 算法设计与分析——排序算法(七):快速排序-[快速排序的分析]

在《快速排序-[快速排序的性能]》中,我们给出了在最坏情况下快速排序性能的直观分析,以及它速度比较快的原因。在本文中,我们要给出快速排序性能的更严谨的分析。我们首先从最坏情况分析开始,其方法可以用于原版和随机化版本的quick_sort(arr,low,high)的分析,然后给出随机化版本的quick_sort(arr,low,high)的期望运行时间。在《快速排序-[快速排序的性能]》中,我们得到在最坏情况下,快速排序的每一层递归的时间复杂度是Θ(n2)\Theta(n^2)Θ(n2)。我们也从直观上了

2021-09-04 23:44:35 11730

原创 算法设计与分析——排序算法(七):快速排序-[快速排序的随机化]

在讨论快速排序的平均情况性能的时候,我们的前提假设是:输入数据的所有排列都是等概率的。但是在实际工程中,这个假设并不会总是成立(见练习7.2-4)。正如在5.3节中我们所看到的那样,有时我们可以通过在算法中引入随机性,从而使得算法对于所有的输入都能获得较好的期望性能。很多人都选择随机化版本的快速排序作为大数据输入情况下的排序算法。在5.3节中,我们通过显式地对输入进行重新排列,使得算法实现随机化。当然,对于快速排序我们也可以这么做。但如果采用一种称为随机抽样( random sampling)的随机化技术

2021-09-04 19:15:55 11330

原创 算法设计与分析——排序算法(七):快速排序-[快速排序的性能]

快速排序的运行时间依赖于划分是否平衡,而平衡与否又依赖于用于划分的元素。如果划分是平衡的,那么快速排序算法性能与归并排序一样。如果划分是不平衡的,那么快速排序的性能就接近于插入排序了。在本文中,我们将给出划分为平衡或不平衡时快速排序性能的非形式化的分析。最坏情况划分当划分产生的两个子问题分别包含了n−1n-1n−1个元素和000个元素时,快速排序的最坏情况发生了。不妨假设算法的每一次递归调用中都出现了这种不平衡划分。划分操作的时间复杂度是Θ(n)\Theta(n)Θ(n)。由于对一个大小为000的数组进

2021-09-04 18:58:07 12830 1

原创 系统学习Python——实现数据结构字典树(前缀树、Trie树)

我们在《字典树(前缀树、Trie树)》这一篇文章中详细介绍了Trie树,本文将利用Python语言实现它。我们以Trie来命名我们的Trie树类,它实例化后代表了我们Trie树中的每一个节点。每个节点包含以下两个字段:children:指向子节点的指针数组,其长度为字符数,本文以不区分大小写的26个因为字母作为例子,构建了一个长度为26的数组children,其下标iii代表着第i+1i + 1i+1个英文字母(不区分大小写),比如children第0个位置代表着字母AaAaAa,第1个位置代表着字母

2021-09-04 13:58:36 9917

原创 算法设计与分析——字典树(前缀树、Trie树)

字典树又称单词查找树、前缀树、Trie树等,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它可以利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。它还有很多变种,如后缀树、Radix Tree、PATRICIA tree、crit-bit tree等等。定义在计算机科学中,Trie树(前缀树/字典树)是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键

2021-09-04 10:39:38 10505

原创 系统学习Python——利用collections.deque模块实现双向队列

我们在《栈和队列》的文章中介绍了队列。传统的队列实现了一种先进先出的策略,二双向队列的可以实现从队头或者队尾添加或弹出的操作。class collections.deque([iterable[, maxlen]])返回一个新的双向队列对象,从iterable(迭代对象) 数据创建,从左到右初始化。如果iterable没有指定,新队列为空。Deque队列是由栈或者队列生成的(”double-ended queue”的简称)。Deque支持线程安全,内存高效添加(append)和弹出(pop),从两端

2021-09-01 20:07:54 10251

原创 系统学习Python——利用heapq模块实现堆

我们在《算法设计与分析》系列中详细介绍了堆这种数据结构以及堆排序的相关知识。现在,我们利用heapq模块实现了堆队列算法(优先队列算法)。正如《堆(一):基础知识》所述,堆是一个二叉树,它的每个父节点的值都只会小于或等于所有孩子节点的值。 它使用了数组来实现:从零开始计数,对于所有的kkk ,都有heap[k]≤heap[2∗k+1]heap[k]\leq heap[2*k+1]heap[k]≤heap[2∗k+1]和heap[k]≤heap[2∗k+2]heap[k]\leq heap[2*k+2]he

2021-09-01 19:28:19 10285

思维导图源文件《预训练模型总览》

该文件为《预训练模型总览》思维导图源文件,可自行编辑并输出相应图片或自行学习保存使用,详细内容可以参考:文章《自然语言处理从入门到应用——预训练模型总览》,文章链接:https://machinelearning.blog.csdn.net/article/details/131404053 从大量无标注数据中进行预训练使许多自然语言处理任务获得显著的性能提升。总的来看,预训练模型的优势包括: - 在庞大的无标注数据上进行预训练可以获取更通用的语言表示,并有利于下游任务 - 为模型提供了一个更好的初始化参数,在目标任务上具备更好的泛化性能、并加速收敛 - 是一种有效的正则化手段,避免在小数据集上过拟合,而一个随机初始化的深层模型容易对小数据集过拟合 该思维导图源文件就是各种预训练模型的思维导图,其分别按照词嵌入(Word Embedding)方式分为静态词向量(Static Word Embedding)和动态词向量(Dynamic Word Embedding)方式分类、按照监督学习和自监督学习方式进行分类、按照拓展能力等分类方式展现,用户可以自行编辑修改。

2023-06-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除