1781 words
9 minutes
重新学习概率论:概率论在深度学习里的实际应用
概率系统分析和应用概率
我重新学习了概率论这门课,是在MIT公开课。重新审视一下。这门课叫概率系统分析和应用概率(Probabilistic Systems Analysis And Applied Probability)。MIT的6.041/6.431课程,这与我们大学的概率论与数理统计课程有着明显不同之处,它就是应用与理论的平衡,MIT强调概率的理论基础及其在工程和科学中的应用。这种方法比一些更侧重于理论方面的我们的课程更实用。就拿考研概率论来讲,我们学习主要只是学会公式去做题就可以了。然而MIT讲课时经常拿实际的力学等工科来举一些例子,这培养了我们对模型建模算法决策等更加敏感。
MIT概率论公开课单元和课时主要内容
第一单元:概率模型和离散随机变量
- 介绍概率模型的基本概念,包括离散随机变量及其分布的研究。
第二单元:一般随机变量
- 扩展到一般随机变量,涵盖其概率分布、期望值和关键属性。
第三单元:随机过程
- 焦点转向随机过程,探讨如马尔可夫链等随时间演变的随机性建模的随机过程。
第四单元:大数定律和推断
- 本单元涵盖大数定律,这是许多统计推断方法的基础,并深入介绍统计推断的初步概念。
课时内容
- 概率模型和公理
- 条件作用和贝叶斯规则
- 独立
- 计数
- 离散随机变量;概率质量函数;期望
- 离散随机变量示例;联合 PMF
- 多个离散随机变量:期望、条件、独立性
- 连续随机变量
- 多个连续随机变量
- 连续贝叶斯规则;派生分布
- 派生分布;卷积;协方差和相关性
- 迭代期望;随机数随机变量的总和
- 伯努利过程
- 泊松过程 - I
- 泊松过程 - II
- 马尔可夫链 - I
- 马尔可夫链 - II
- 马尔可夫链 - III
- 大数定律
- 中心极限定理
- 贝叶斯统计推断 - I
- 贝叶斯统计推断 - II
- 经典统计推断 - I
- 经典推理 - II
- 经典推理 - III 课程概述
概率论又和机器学习、深度学习紧密相连。在深度学习当中,有哪些概率论知识点是我们需要了解的呢,我们一个深度学习项目从头来进行研究:
数据收集和预处理
- 数据质量评估:使用概率模型来评估缺失数据的可能性,决定是否需要采用插值或使用其他方法处理缺失数据。
- 异常值检测:利用概率分布(如高斯分布)来识别和处理异常值,例如计算数据点与平均值的标准差数来决定哪些点可能是异常。
探索性数据分析(EDA)
- 数据分布分析:理解各种变量的分布特性,如正态性、偏态等,使用概率图形(如QQ图)来评估数据的分布情况。
- 相关性分析:计算变量间的相关系数(如皮尔逊相关系数),评估变量间的线性关系的强度和方向。
特征工程
- 特征选择:基于信息增益、互信息等概率论概念,选择与目标变量关系密切的特征。
- 概率编码:例如,使用目标编码,根据条件概率将类别变量转换为数值,以提供更好的预测性能。
模型选择和训练
- 模型比较和选择:利用概率论中的假设检验(如t-检验)来比较不同模型的性能。
- 超参数优化:使用贝叶斯优化技术,基于概率模型来搜索最优的模型参数。
模型评估和验证
- 置信区间和假设检验:计算模型指标(如准确率、回归系数)的置信区间,进行假设检验以验证模型的统计显著性。
- 交叉验证:使用概率论方法来分析模型在不同子集上的性能变异,评估模型的稳健性。
模型部署和监控
- 风险评估:通过计算预测结果的不确定性(例如,使用概率输出而非单点估计),来评估模型在实际应用中可能面临的风险。
- AB测试:设计和评估实验,确定新模型是否比现有模型表现更好,使用概率统计方法来判断实验结果的显著性。
结果解释和报告
- 统计显著性报告:解释模型中各个变量的统计显著性,帮助非技术利益相关者理解模型决策的可靠性。
- 概率解释:提供模型决策的概率解释,如预测置信度,增强报告的透明度和信任度。
介绍完了应用。那么具体的例子又有哪些,体现在哪些代码上面了呢以下是常用的四个代码实际例子。
深度学习中的概率论应用实例
1. 使用正态分布初始化神经网络权重
在深度学习中,初始化网络权重是非常关键的一步。通常使用正态分布(或高斯分布)来初始化,这有助于模型的收敛。
import torch
import torch.nn as nn
# 定义一个简单的神经网络
class SimpleNet(nn.Module):
def __init__(self):
super(SimpleNet, self).__init__()
self.fc1 = nn.Linear(10, 50)
# 使用正态分布初始化权重
nn.init.normal_(self.fc1.weight, mean=0, std=0.1)
model = SimpleNet()
print("Initialized weights:", model.fc1.weight)
2. 使用Softmax函数进行多类别分类
在多类别分类问题中,我们通常使用Softmax函数将神经网络输出转换为概率分布。
import torch
import torch.nn.functional as F
# 假设网络输出
logits = torch.randn(1, 5)
# 应用Softmax函数
probabilities = F.softmax(logits, dim=1)
print("Probabilities:", probabilities)
3. 使用贝叶斯方法进行参数估计
在某些情况下,深度学习模型可以采用贝叶斯框架来估计网络参数的不确定性,尽管这通常需要更复杂的实现。这个我接触的比较少,不经常用到。
import torch
import pyro
import pyro.distributions as dist
# 假设模型参数的先验为正态分布
param_prior = dist.Normal(0, 1)
# 抽样模型参数
sampled_param = pyro.sample("param", param_prior)
print("Sampled parameter:", sampled_param)
4. 使用Dropout作为模型正则化技术
Dropout可以被视为在训练过程中随机地从网络中丢弃(即将输出置为0)一些神经元的过程,这是一种实现模型正则化的技术,以避免过拟合。Dropout背后的思想与概率密切相关。
import torch
import torch.nn.functional as F
# 假设输入数据
input_tensor = torch.randn(1, 10)
# 应用dropout
output = F.dropout(input_tensor, p=0.2, training=True)
print("Output with dropout:", output)
以上就是深度学习领域中一些经常使用的概率论知识和技术。理解这些和应用这些概念对于我们去设计一个高效和鲁棒的模型至关重要。
重新学习概率论:概率论在深度学习里的实际应用
https://ruiboom.cn/posts/probabilisticsystemsanalysisandappliedprobability/