关注人工智能与各学科的交叉发展
题目:编写一个程序,用递归的方法实现查找数组中的最大值。 C++实现 1 #include 2 3 using namespace std; 4 //第一种方法是常规方法,不是使用递归,首先将第一个元素的值赋值给max,然后遍历数组, 5 //当遇到超高max的值时将其赋值给max,最...
1.1计算机视觉 (1)计算机视觉的应用包括图像分类、目标检测、图像分割、风格迁移等,下图展示了风格迁移案例: (2)图像的特征量非常之大,比如一个3通道的1000*1000的照片,其特征为3*1000*1000达到300万,如果第一个隐藏层有1000个单元那么W[1]有20亿个参数,计算量不仅大,而且由于图像样本相对于特征实在是太少,导致很容易过拟合,所以需要其他的方式来连接,即卷积。
题目:请说出下面图形中包含多少个三角形?请用一个程序完成计算。 C++版本 1 #include 2 3 using namespace std; 4 5 const char NO_POINT = '0'; 6 7 //任意的一条线 8 const char *map[]...
1.1为什么是ML策略 (1)当对一个实际的应用系统进行优化时,可能有很多想法:如提高数据量,提高网络深度,正则化等等,一个错误的选择可能浪费非常多的时间,本课就是让你在面对很多选择时做出正确的选择,这就是ML策略。
3.1调试处理 (1)不同超参数调试的优先级是不一样的,如下图中的一些超参数,首先最重要的应该是学习率α(红色圈出),然后是Momentum算法的β、隐藏层单元数、mini-batch size(黄色圈出)、再之后是Layer、learning rate decay(紫色圈出)、最后是Adam算法中的β1、β2、ε。
题目:我们把只含有因子2、3、5的数称为丑数。例如6、8都是丑数,而14不是丑数,因为它含有因子7.通常也把1当做丑数。编程找出1500以内的全部丑数。注意:使用的算法效率应尽量高。 C++实现: 1 #include 2 3 using namespace std; 4 5 //判...
题目:有10个任意的正整数,将其分为两组A和B,要求组A中每个数据的和与组B中每个数据的和之差的绝对值最小。请设计算法实现数的分组(找出一个答案即可)。 C++版本: 1 #include 2 3 using namespace std; 4 5 void get_groupAB(i...
2.1Mini-batch梯度下降 (1)例如有500万个训练样本,这时可以每1000个组成一个Mini-batch,共用5000个Mini-batch。主要是为了加快训练。 (2)循环完所有的训练样本称为(1 epoch)。
丢番图的一生1/6是童年,青少年时代占了他一生的1/12,随后1/7他说过着独身的生活,结婚后5年他生了一个儿子,他感到很幸福,可是这孩子的生命只有他父亲的一半,儿子去世后,丢番图就在深深痛苦中活了4年,结束了生命,请问丢番图活了多少岁?丢番图的一生1/6是童年,青少年时代占了他一生的1/12,随后...
1.1训练,验证,测试集(Train/Dev/Test sets) (1)深度学习是一个按照下图进行循环的快速迭代的过程,往往需要多次才能为应用程序找到一个称心的神经网络。 (2)在机器学习中,通常将样本分成训练集,验证集和测试集三部分,数据规模相对较小,适合传统的划分比例(如6:2:2),数据集规模比较大的,验证集和测试集要小于数据总量的20%或者10%甚至更低。
A、B、C、D、E5个渔夫夜间合伙捕鱼,各自在河边的树丛中休息。待日上三竿,渔夫A第一个醒来,他将鱼分作5份,把多余的一条扔回河中,拿自己的一份回家了。渔夫B第二个醒来,也将鱼分作5份,扔掉多余的一条,拿走自己的一份,接着后三个也按同样的办法分鱼,问5个渔夫至少合伙捕了多少条鱼。
4.1深层神经网络 (1)到底是深层还是浅层是一个相对的概念,不必太纠结,以下是一个四层的深度神经网络: (2)一些符号定义: a[0]=x(输入层也叫做第0层) L=4:表示网络的层数 g:表示激活函数 第l层输出用a[l],最终的输出用a[L]表示 n[1]=5:表示第一层有五个神经元,第l层神经元个数用n[l]表示 4.
3.1神经网络概述 (1)神经网络每个单元相当于一个逻辑回归,神经网络由逻辑回归的堆叠起来。下图是网络结构: 针对网络结构进行计算: 1.第一层的正向传播 2.第一层的反向传播 3.第二层的反向传播(正向只要把微分符号去掉即可) 3.
2.1二分类 (1)以一张三通道的64×64的图片做二分类识别是否是毛,输出y为1时认为是猫,为0时认为不是猫: y输出是一个数,x输入是64*64*3=12288的向量。 (2)以下是一些符号定义(数据集变成矩阵之后进行矩阵运算代替循环运算,更加高效) x:表示一个nx维数据,维度为(nx,1)...
1.1欢迎 主要讲了五门课的内容: 第一门课:神经网络基础,构建网络等; 第二门课:神经网络的训练技巧; 第三门课:构建机器学习系统的一些策略,下一步该怎么走(吴恩达老师新书《Machine Learning Yearning》就是针对这个以及上一课); 第四门课:卷积神经网络相关; 第五门课:循环神经网络相关。
(1)涉及到的算法 1.监督学习:线性回归,逻辑回归,神经网络,SVM。 线性回归(下面第三行x0(i)其实是1,可以去掉) 逻辑回归 神经网络(写出前向传播即可,反向框架会自动计算) SVM 2.非监督学习:聚类算法(K-mean),降维(PCA) K-mean PCA 3.异常检测 4.推荐系统 (2)策略 1.偏差与方差,正则化 训练误差减去人类最高水平为偏差(欠拟合),交叉验证集误差减训练误差为方差(过拟合); 正则化解决方差问题,不对θ0正则化; 2.学习曲线 全过程观测偏差与方差,所以更全面。
16.1问题形式化 (1)讲推荐系统的原因主要有以下几点: 1.推荐系统是一个很重要的机器学习的应用,虽然在学术界上占比较低,但是在商业应用中非常的重要,占有很高的优先级。 2.传达机器学习的一个大思想:特性是可以学习而来的,不需要人工去选择。
15.1问题的动机 将正常的样本绘制成图表(假设可以),如下图所示: 当新的测试样本同样绘制到图标上,如果偏离中心越远说明越可能不正常,使用某个可能性阈值,当低于正常可能性阈值时判断其为异常,然后做进一步的检查。
18.1问题描述和流程图 (1)图像文字识别是从给定的一张图片中识别文字。 (2)流程包括: 1.文字侦测 2.字符切分(现在不需要切分了) 3.字符分类 18.2滑动窗口 在行人检测中,滑动窗口是首先训练一个固定尺寸输入的判断是否有行人的网络,然后在一张图片中裁该尺寸的图片,送入到网络中;然后不断移动裁剪区,重复以上过程,知道裁剪到最后,这时按比例放大裁剪区,然后将裁剪到的图片缩放到网络的输入,如此循环。
14.1动机一:数据压缩 将特征进行降维,如将相关的二维降到一维: 三维变二维: 以此类推把1000维数据降成100维数据。 14.2动机二:数据可视化 如50个维度的数据是无法进行可视化的,使用降维的方法可以使其降到2维,然后进行可视化。
13.1无监督学习:简介 将没有标签的样本分成不同的集合(簇),这种算法叫做聚类。常用的领域有市场分割、社交网络分析、计算机集群管理、了解星系等。 13.2K-均值算法 (1)K-均值是最普及的聚类算法,是一种迭代算法,假设需要将数据聚类成n个组,这时候首先随机选择K个点,称为聚类中心。
12.1目标优化 (1)以下是逻辑回归以及单个样本的代价函数 (2)首先将使用上图中紫色的线(称为cost1或者cost0)的代替曲线,然后将样本数m去掉,最后将C代替1/λ(可以这么理解,但不完全是),从而实现逻辑回归的代价函数到SVM的转换。
11.1首先要做什么 本章将在随后的课程中讲误差分析,然后怎样用一个更加系统性非方法,从一堆不同的方法中,选取合适的那一个。 11.2误差分析 构建一个学习算法的推荐方法为: (1)从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法; (2)绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择; (3)进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的实例,看看这些实例是否有某种系统化的趋势。
10.1决定下一步该干什么 当系统的效果很差时,你可能考虑到收集更多的样本,也可能: (1)尝试减少特征的数量; (2)尝试获得更多的特征; (3)尝试增加多项式特征; (4)尝试减少正则化程度λ; (5)尝试增加正则化程度λ。
9.1代价函数 (1)假设神经网络的训练样本有m个,每一个包含一组输入x和一组输出信号y,L表示神经网络的层数,Sl表示每一层的神经元个数,SL代表最后一层中处理单元的个数。 则代价函数为(同样不对θ0正则化): 9.2反向传播算法 前向传播算法: 用δ表示误差,则δ(4)=a(4)-y 前一层的误差为: 再前一层的误差为: 。
8.1非线性假设 (1)无论线性回归还是逻辑回归当特征量太多时,计算的负荷会非常大。如50x50像素有2500特征,如果两两组合将会有25002/2个(接近300万个特征)。普通的线性回归和逻辑回归模型不能有效处理这么多特征,这时候需要用神经网络了。
7.1过拟合的问题 训练集表现良好,测试集表现差。鲁棒性差。以下是两个例子(一个是回归问题,一个是分类问题) 解决办法: (1)丢弃一些不能帮助我们正确预测的特征。可以使用工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(PCA); (2)正则化。
6.1分类问题 回归问题的输出可能是很大的数,而在分类问题中,比如二分类,希望输出的值是0或1,如何将回归输出的值转换成分类的输出0,1成为关键。 6.2假说表示 其中: hθ(x)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1的可能性即hθ(x)=P(y=1|x;θ)。
推荐使用python,本节略。
4.1多维特征 上图中列数即为特征的个数,行数是样本数。函数假设如下: 其中x0=1。 4.2多变量梯度下降 和单变量的损失函数相同: 其中, 求导迭代如下: 4.3梯度下降法实践1-特征缩放 特征之间的尺度变化相差很大(如一个是0-1000,一个是0-5),梯度算法需要非常多次的迭代才能收敛,如下图所示: 方法:将各个特征缩放至大致相同的尺度,最简单的方法就是特征减去均值除以方差。
3.1矩阵和向量 几行几列即为矩阵。Aij表示第i行第j列。 只有一行或者一列的称为向量,向量是一种特殊矩阵。一般向量指的是列向量。 3.2加法和标量乘法 加法:元素对应相加。 标量乘法:标量和矩阵每一个元素相乘。
2.1模型表示 (1)监督学习中的回归问题案例房价预测 (2)监督算法的工作方式 案例中:m表示训练集的数量,x代表特征/输入变量,y代表目标变量/输出变量,(x,y)代表实例,(x(i),y(i))代表第i个观察实例,h代表假设/函数/输入到输出的映射。
1.1欢迎 1.2机器学习是什么 (1)一种机器学习的定义:一个程序被认为能从经验E中学习,解决任务T,达到性能指标度量值P,当且仅当,有了经验E后,经过P评判,程序在处理T时的性能有所提升。 (2)机器学习算法主要分为监督学习和非监督学习。
论文全名:Detecting Text in Natural Image with Connectionist Text Proposal Network 1.摘要 (1)本文提出新型网络CTPN,用于自然图像中的文本行定位。
1.知识点 (1)指针可以指向任何类型,也可以指向函数。每个函数在内存中都占用一段存储单元,这段存储单元的首地址称为函数的入口地址,指向之歌函数入口地址的指针称为函数指针。 (2)函数基本用法如下: 1 int max(int a, int b) { 2 return a > b ? a ...
1.知识点 (1)在程序中可以声明指向任何数据类型的指针,指针也可以指向指针类型,成为指向指针的指针。下面是一个使用例子 1 int a=10,b=20; 2 int *q=&a; 3 int **p=&q; 4 **p=30; (2)如果想通过指针在被调函数中修改主调函数的变量,必须将主调函变量(务必确定该变量的类型,有时候可能变量本身就是指针,这时候形参就需要是指针的指针了)的地址作为参数,在被调函数中修改主调函数指向的内容。
说明:主要考虑深度学习的方法,传统的方法不在考虑范围之内。 1.文字识别步骤 1.1detection:找到有文字的区域(proposal)。 1.2classification:识别区域中的文字。 2.文字检测 文字检测主要有两条线,两步法和一步法。
题目:编程实现输入某年某月某日,计算这一天是这一年的第几天: 1 #include 2 3 4 using namespace std; 5 6 int getDays(int year, int month, int day) { 7 int days_of_mont...
1 #include 2 3 using namespace std; 4 5 bool isPrime(int n) { 6 for (int i = 2; i < n; i++) { 7 if (n%i == 0) { //能被2到把自身小1的数...
题目:10个互不相等的整数,求其中的第2大的数字,要求数组不能用排序,设计的算法效率越高越好。 1 #include 2 3 using namespace std; 4 5 int max_second(int *arr,int n) { 6 int max_first...
斐波那契数列是一个常识性的知识,它指的是这样的一个数列,它的第一项是1,第二项是1,后面每一项都是它前面两项的和,如:1,1,2,3,5,8,13,21,34,55,89,144,233…… 说明:由于通过递推方式效率低,系统开销大,空间复杂度高,故不考虑。
1.知识点 1.1指针数组——存放指针的数组 (1)指针数组本质上是一个数组,指针是数组中的内容,表示数组中的每个元素都是指针,因此指针数组就是存放指针的数组。下面是指针数组的用法: 1 int a = 10, b = 20; 2 int *p[3]; 3 p[0] = &a; 4 p[2] = &b; (2)指针数组的定义可以抽象为:指向变量类型 * 数组名称[数组长度]。
1.知识点 1.1指针常量——指针类型的常量 (1)指针常量本质是常量,指针用来说明常量的类型,表示该常量是一个指针类型的常量。 (2)在指针常量中,指针的值不可变,即始终指向同一个地址。 (3)但指针所指向的地址的值是可以通过*p来改变的。
1.知识点 三步走:申请,释放,指针置空。 1.1malloc、free函数 在C语言中内存malloc函数申请动态空间,以下展示其基本用法: 1 int *p = NULL; 2 p = (int *)malloc(sizeof(int) * 10);//申请 3 free(p);//释放,否则会造成内存泄漏 4 p = NULL;//指针置空,否则成为野指针 (1)动态分配的空间来自队空间,而指针本身作为局部变量存储在栈空间中。
1.知识点 (1)sizeof是一个单目运算发,而不是一个函数,其用于获取操作数所占内存空间的字节数。 (2)sizeof的操作数可以使类型名,也可以是表达式,如果是类型名则直接获得该类型所占字节数,如果是表达式,则先分析表达式结果的类型,再根据类型确定所占字节数,并不对表达式进行实际计算。
1.知识点 1.1宏定义 (1)不带参数的宏定义 1 #define ERROR_MESSAGE -100 2 #define SECONDS_PER_DAY 60*60*60 (2)带参数宏定义,这种形式称为宏函数,但其实并不是函数 #define OUTPUTINT(x) cout
注:读《程序员面试笔记》笔记总结 1.知识点 1.1条件语句 (1)if……;(2)if……else……;(3)if……else if……;(4)switch(){case ():break;case():break;default:}。
注:总结来自黄海广博士。
注:总结来自黄海广博士。
注:总结来自黄海广博士。 错误修正:9.微分中值定理,T2(罗尔定理)中缺了条件:a=b。