- 实际问题的决策/推理(infer)举例:买中午饭时,钱和个人偏好等均是约束条件;=》抽象一下:外部输入信息,根据约束条件做出对应的决策/推理
- 实际问题的预测(prediction)举例:
1.看到一组照片(一个实体),如果我们可以把它和一个抽象概念联系起来的过程叫做prediction过程
2.手写数字抽象成数字
数字是抽象的:2个苹果,2条鱼,其实这个2就是个抽象的量化统计概念,并没有指定其到底是啥,仅是个量化的抽象概念,所以我们说数字是抽象的(这个是笔者的拙见,如有不对之处,烦请读者指出哈~)
infer:推荐系统这种的
prediction:用算法把视觉信息/自然文本信息=》抽象概念
在深度学习中,我们基本上用的是监督学习:labeled Dataset(打上标签的数据集),我们知道图片的答案,然后用labeled Dataset对模型进行训练,最后得到我们的算法
开发学习系统的历史过程:
- 基于规则的系统:input---手工设计程序---output(最早的AI算法就是基于此系统,
eg:高数中的求积分问题:1.有一些基本积分公式(知识库) 2.有积分运算(规则)。当问题越来越多/更复杂,1,2都要扩大,整个1,2体系就会越来越大(手工设计程序是需要特别专业的人来制定规则,当遇到复杂问题时,我们其实很难把问题规则定义的完美,无缺陷,当问题越来越复杂,制定规则就越难,也更容易出现算法缺陷,所以基于规则的代码的规则会越来越庞大,最终大到人类无法维护的情况) - 经典的机器学习:input---手工设计提取特征(eg:成立预测问题上发现高等数学,英语对下一学期物理成绩影响比较大,我们就把这2门课提取出来)(把input=》向量/张量)---mapping from features(把这个向量/张量和output之间建立映射函数关系===》向量为x,output为y)---output (感知机,神经网络都在做这个工作)
- 表示学习:input---features(features里面的方法最好也能学出来,所以早期features的提取是一个单独的步骤:用一些算法,把特别复杂的非结构input提取出一个向量(features)---mapping from features---output (features(机器学习的很多无监督学习都需要做features提取训练(因为features没有标签所以肯定是无监督学习))和mapping from features(有标签)是分开训练)
(维度诅咒:input的feature越多对整个样本的数量需求量就大,采样越多,跟真实数据就越贴近,比如:在一维空间里采了10个样本,假如这个样本密度就已经够了,如果是在有2个features的空间里采样,2个维度都需要10个,这样就是100个点,此时二维的才和一维的10个样本数据密度对应,这样才能说此样本代表原始数据分布,3个维度就是100,n个维度就是10的n次方。由此可知,维度越高,我们对数据量要求就越大。)
收集数据工作量大,所以我们就想能不能降维度,对维度进行映射:n维映射到3维:N x 1矩阵 X 3 x N矩阵= 3 x 1矩阵,只要找到3 x N矩阵就能将n维矩阵映射到3维矩阵即n维降到3维。我们在降维的时候尽量维持高维度数据的布点信息。这个过程就是表示学习:就是学到从高维空间到低维空间的表示
如果数据有一维是空的就可以直接把这空的维度去掉,此过程是降维 - deep learning:input---simple features(做一些原始性特征,eg:把图片的像素值变成一个张量)---additional layers of more abstract features(提取特征)---mapping from features(学习器,eg:多层的神经网络)---output(features 和mapping from features是一起训练,所以我们又把deep learning 叫做 end to end (端到端)训练过程。)
以前的模型是SVM family,SVM family到了deep learning,因为deep learning的一些限制,就只能开始使用这种深度神经网络来学习端到端的学习方法。
Brief history of neural networks
哺乳动物大脑中视觉部分在处理信息的时候是分层的,不是你看到同学,你的同学就对应着你大脑的一部分神经元,而是一个分层的处理过程:浅层的神经元检测简单的特征,eg:线条的移动/颜色块。高级的特征检测更抽象特征,eg:你看的是只猫还是狗
用仿生学的方法构建一个神经元模型,这个模型叫做感知机
back propagation(反向传播)
- 能让神经网络算法工作起来
- 实质:求偏导数,用back propagation求偏导数而不用解析式求,原因:随着网络层数增多,用算法写解析式太困难
- 核心:计算图:每一步计算只能进行原子计算,即最基本的运算(不可再分割的计算)
- 在深度学习里面有大量的原子计算,eg:矩阵乘法,基本的卷积运算
- 前馈:把数据往计算图里传,计算未知量,同时可以计算该未知量的偏导数
- back propagation:把未知量的偏导数在计算图中传播,然后计算计算图中所有未知量的偏导数
一些小tips:
机器学习算法同”正常“算法的区别:
”正常“算法里面的几个思维方式:
- 穷举
- 贪心(机器学习中的梯度下降其实就是运用了贪心算法的思想)
- 分治(eg:快排)
- 动态规划
机器学习算法:
- 有数据集
- 从数据集找出目标算法(人话:我们想要的算法)
- 验证模型(算法)好坏
- 好=》部署;坏=》继续训练
(整个计算来自于数据集而非人工设定(参数调节除外),而”正常“算法的每一步都是人工写出来的)