机器学习
深度神经网络主要研究的问题:
深度学习技术主要是数据驱动的,即对一个特定任务来说,只要增加训练数据的规模深度学习模型的表现就可提高。但是发展到今天,这种思路面临很多挑战,主要问题问题:
- 一是在很多领域,很难获取大量的监督数据,或者数据的标注成本过高
- 二是训练数据规模再大,也有难以覆盖的情况。例如聊天机器人,我们不可能穷尽所有可能的答案,而且很多答案也是随时间变化的,因此仅仅依靠大规模的训练语料,并不能解决这些问题;
- 三是通用深度学习模型直接应用到具体问题,其表现(效果、性能、占用资源等)可能不尽如人意,这就要求根据特定的问题和数据来定制和优化深度学习网络结构,这是当前研究最多、最热的地方;
四是训练的问题,包括网络层数增加带来的梯度衰减,及如何更有效地进行大规模并行训练等。
为了解决这些问题,当前的研究前沿主要包括以下几个方向:
- 一是引人外部知识,例如知识图谱等;
- 二是深度学习与传统方法的结合,包括人工规则与深度神经网络的结合、贝叶斯与深度神经网络的结合、迁移学习与深度神经网络的结合、强化学习与深度神经网络的结合和图模型与深度神经网络的结合等,
- 三是无监督的深度生成模型;四是新的网络结构、新的训练方法等。
人类智能: v“人类根据初始信息来生成和调度知识、进而在目标引导下由初始信息和知识生成求解问题的策略并把智能策略转换为智能行为从而解决问题的能力”
什么是人工神经网络?
人工神经网络(ArtificialNeuralNetworks,ANN)是指由大量的人工神经单元互相连接而形成的复杂网络结构,是对人脑组织结构和运行机制的某种抽象、简化和模拟。Simpson曾这样描述人工神经网络:“人工神经网络是一个非线性的有向图,图中含有可以通过改变权重大小来存放模式的加权边,并且可以从不完整的或未知的输人找到模。”Kohonen对人工神经网络给出如下定义:“神经网络是由具有适应性的简单单元组成的广泛并行互联的网络,它的组织能够模拟生物神经系统对真实物理世界所做出的交互反应。”
人工神经网络的特点?
- 并行分布处理
- 非线性映射
- 信息分布存储及容错性
- 自组织学习能力
什么是深度强化学习,它和传统的强化学习有什么不同?
深度强化学习(Deep Reinforcement Learning,简称 DRL)是一种结合了深度学习(尤其是深度神经网络)和传统强化学习(Reinforcement Learning,RL)的技术。它通过利用深度神经网络的强大表示能力来解决复杂的决策问题,特别是在高维输入空间中,比如图像、语音等。
深度学习主流框架
Scikit-learn 、PyTorch、Keras、TensorFlow
ANN(Artificial Neural Networks,人工神经网络)
ANN 是一类模仿人脑神经元结构的计算模型,通过学习数据中的模式来进行预测或分类。它由多个相互连接的“神经元”组成,每个神经元接收输入信号,通过激活函数进行处理,并传递给下一个神经元。
ANN的架构:
- 输入层:接收原始输入数据。
- 隐藏层:可以有多层,每层由多个神经元组成,负责对输入数据进行特征提取和变换。
- 输出层:根据隐藏层的计算结果,输出最终的预测或分类结果。
ANN的原理:
- 前向传播:输入数据从输入层开始,依次通过隐藏层传递到输出层。
- 反向传播:通过计算输出层的误差,并反向传播至输入层,调整各层之间的权重,以最小化误差。
CNN(Convolutional Neural Networks,卷积神经网络)
CNN核心思想:利用卷积核的特征提取能力,通过多层级实现多尺度特征学习
CNN的原理:
- 卷积运算:卷积核在输入数据上滑动,计算局部区域的加权和。
- 特征提取:通过多层卷积层提取不同层次的特征。
- 分类:通过全连接层将特征映射到具体的类别上。
CNN的架构:
- 卷积层(Convolutional Layer):
- 使用卷积核(也称为滤波器或特征检测器)对输入数据进行卷积运算。
- 卷积核在输入数据上滑动,计算局部区域的加权和。
- 每个卷积核负责检测不同的特征,如边缘、纹理等。
- 激活层(Activation Layer):
- 通常使用非线性激活函数(如 ReLU、Sigmoid、Tanh 等)来增加网络的非线性表达能力。
- ReLU(Rectified Linear Unit)是最常用的激活函数之一,它可以加速训练过程。
- 池化层(Pooling Layer):
- 用于降低数据的空间维度,减少计算量。
- 常见的池化方法有最大池化(Max Pooling)和平均池化(Average Pooling)。
- 全连接层(Fully Connected Layer):
- 在网络的最后几层,通常将卷积层输出的特征图展平为一维向量,然后通过全连接层进行分类或其他任务。
- 全连接层负责将卷积层提取的特征映射到具体的类别上。
什么叫卷积?
卷积公式:
解释:
卷积的物理意义:一个系统输入不稳定,输出稳定,就可以用卷积求系统存量(利用卷积核(滤波器)求积分)
f函数 = 不稳定输入
g函数 = 稳定输出
举例:
一个人24小时不间断一直在吃东西,如果把这个图画出来的话就是这个样子。这个横坐标代表了它进食的时间,纵坐标代表了它的进食了多少。那不止他吃东西还要消化,这个消化的速率和他吃的东西没有关系,画出来就是这样子,不论你什么时间吃吃的是多少,你消化的比率总是按那个图样进行消化的,横坐标仍然是时间,纵坐标就是你吃进去的食物到了某个时间还剩多少。
有了这两个图之后,接下来就是看一个具体的问题了。假如说下午2点就问这个人的肚子里面还剩多少食物。你只要带入这个卷积公式里面,马上就能得出结果。卷积的公式是这个样子的,它有两个函数,一个是F函数,一个是g函数,我们就可以把这个人的进食情况用F函数来表示,而那个消化情况呢用g函数来表示。
比如说在上午12点,他吃了一碗米饭。12点到下午14点是2个小时,同样我们再来看g函数的图像。2个小时之后面包它已经消化到这个程度了,它的比率是g(14-12),然后再乘以当时这个面包的量就是f(12),结果就是在下午2点胃里米饭剩下的部分。
卷积操作的目的
1.特征提取
卷积操作的核心在于使用卷积核(也称为滤波器或特征检测器)来提取输入数据中的局部特征。卷积核通常是一组权重矩阵,它们在输入数据上滑动,并与数据中的局部区域进行逐元素乘法运算,然后求和得到一个输出值。通过这种方式,卷积操作可以从输入数据中提取出边缘、纹理、形状等特征。
示例:
- 边缘检测:使用特定的卷积核(如 Sobel 滤波器)可以检测图像中的边缘。
- 纹理分析:使用适当的卷积核可以提取图像中的纹理特征。
2.局部感知:卷积核只关注输入数据的局部区域,从而能够提取出局部特征。
3.参数共享:同一个卷积核在整个输入数据上滑动,意味着同一组权重可以多次使用,减少了模型的参数数量。
4.空间不变性:卷积操作可以在输入数据的不同位置检测相同的特征。
什么叫池化?
池化(Pooling):也称为欠采样或下采样。主要用于特征降维,在保持旋转、平移、伸缩等不变性的前提下,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。常用的有按均值池化(mean-pooling):更大地保留图像背景信息,按最大值池化(max-pooling):更多的保留纹理信息。
池化主要是为了减少卷积层提取的特征个数,增加特征的鲁棒性或是为了降维(抓住主要矛盾)
LSTM是如何实现长短期记忆功能的?
LSTM(Long Short-Term Memory,长短期记忆网络)是一种特殊的递归神经网络(RNN,Recurrent Neural Network)架构,它被设计用于解决序列数据中的长期依赖问题。传统的 RNN 在处理长序列时容易遭受梯度消失或梯度爆炸的问题,而 LSTM 通过引入一种特殊的记忆单元机制,能够在处理长时间序列数据时有效地捕获长期依赖关系。
LSTM 的结构:
LSTM 的核心在于其“细胞状态”(cell state),这是一个贯穿整个序列的线性链,用于存储信息。LSTM 单元包含三个门控机制,分别是输入门(input gate)、遗忘门(forget gate)和输出门(output gate),这些门控机制控制信息的流动。
LSTM 的工作流程:
- 遗忘门 控制哪些信息应该从细胞状态中被遗忘。
- 输入门 控制哪些新信息应该被写入细胞状态,并产生新信息。
- 细胞状态 更新,保留有用的信息并丢弃不需要的信息。
- 输出门 控制哪些信息应该作为当前时刻的输出
什么是偏差和方差?
偏差指的是由所有采样得到的大小为m的训练数据集训练出的所有模型的输出的平均值和真实模型输出之间的偏差。
方差指的是由所有采样得到的大小为m的训练数据集训练出的所有模型的输出的方差。
为什么需要对数值类型的特征做归一化?
为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。方式有线性函数归一化、零均值归一化
什么是组合特征?如何处理高维组合特征?
为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。以广告点击预估问题为例,原始数据有语言和类型两种离散特征,表1.2是语言和类型对点击的影响。为了提高拟合能力,语言和类型可以组成二阶特征,表1.3是语言和类型的组合特征对点击的影响。
在模型评估过程中,过拟合和欠拟合具体是指什么现象?
过拟合是指模型对于训练数据拟合呈过当的情况,反映到评估指标上,就是模型在训练集上的表现很好,但在测试集和新数据上的表现较差。欠拟合指的是模型在训练和预测时表现都不好的情况。图2.5形象地描述了过拟合和欠拟合的区别。
为什么要进行数据清洗?
1.数据错误:
- 错误类型
- 脏数据或错误数据 ---- 比如 Age=-2003
- 数据不正确 ---- 比如 ‘0’代表真实的 0,还是缺失值
- 数据不一致 ---- 比如收入单位是万元,利润单位是元
- 数据重复
2.缺失值,处理原则
缺失值少于 20%
•连续变量使用均值或中位数填补
•分类变量不需要填补,单算一类即可,或者用众数填补
缺失值在 20%-80%
•填补方法同上
•另外每个有缺失值的变量生成一个指示哑变量,参与后续的建模
缺失值在大于 80%
•每个有缺失值的变量生成一个指示哑变量,参与后续的建模,原始变量不使用。
介绍一下蒙特卡洛算法
蒙特卡洛算法(Monte Carlo Algorithm)是一种利用随机抽样或统计试验来解决问题的计算方法。这类算法广泛应用于数学、物理、工程、金融、计算机科学等多个领域,尤其是在那些传统确定性方法难以解决或计算成本极高的问题上表现出色。
蒙特卡洛算法的基本思想
蒙特卡洛算法的核心思想是通过随机抽样来估计问题的解。这种方法通常包括以下几个步骤:
- 随机抽样:从一个概率分布中抽取样本。
- 计算统计量:基于抽取的样本计算所需的统计量。
- 估计结果:利用统计量来估计问题的解。
- 重复过程:为了提高估计的准确性,通常会重复上述过程多次。
蒙特卡洛算法的特点
- 概率性:蒙特卡洛算法提供的解是概率性的,这意味着算法的结果是基于随机性的,通常需要多次运行来获得更可靠的估计。
- 易于并行化:由于蒙特卡洛算法的每一次抽样都是独立的,因此非常适合并行计算。
- 灵活性:蒙特卡洛方法可以应用于各种类型的问题,从简单的数值积分到复杂的模拟仿真
蒙特卡洛算法的例子
下面通过一个简单的例子来说明蒙特卡洛算法的工作原理:计算圆周率 π的近似值:假设我们想要估计圆周率 π 的值。我们知道在一个单位正方形内画一个半径为 1 的圆,那么圆的面积 Acircle=πr2=π,而正方形的面积 Asquare=4。因此,圆的面积占正方形面积的比例为 π/4。
我们可以随机生成大量点,并检查这些点是否落在圆内。落在圆内的点数占总点数的比例近似等于 π/4。
实现步骤
- 生成随机点:在单位正方形 [−1,1]×[−1,1] 内随机生成大量点。
- 判断点是否在圆内:计算每个点到原点的距离 dd,如果 d≤1d≤1,则该点在圆内。
- 计算比例:统计落在圆内的点数,并计算比例。
- 估计圆周率:使用 π≈4×(落在圆内的点数/总点数)π≈4×(落在圆内的点数/总点数) 来估计圆周率。
import random
def estimate_pi(num_samples):
points_in_circle = 0
total_points = num_samples
for _ in range(num_samples):
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
distance = x**2 + y**2
if distance <= 1:
points_in_circle += 1
pi_estimate = 4 * (points_in_circle / total_points)
return pi_estimate
# 估计圆周率
num_samples = 10000000
estimated_pi = estimate_pi(num_samples)
print("Estimated value of Pi:", estimated_pi)
介绍一下马尔科夫链算法
马尔科夫链(Markov Chain)是一种统计模型,它描述了一种随机过程,在这个过程中,未来状态仅依赖于当前状态,而与过去的状态无关。这种特性被称为马尔科夫性质。马尔科夫链在多个领域都有应用,包括但不限于计算机科学、统计学、经济学、生物学等。
基本概念:
- 状态:马尔科夫链中的一个位置或情况。
- 状态空间:所有可能状态的集合。
- 转移概率:从一个状态转移到另一个状态的概率。
数学表示:
假设有一个有限的状态空间 S={s1,s2,...,sn},那么马尔科夫链可以用一个转移矩阵 P来表示,其中 Pij是从状态 si转移到状态 sj的概率,并且对于所有的 ii,有 ∑j=1n=Pij=1。