李宏毅《深度学习》课程笔记第一章:机器学习核心概念解析

本文为参与DataWhale组队学习期间,对李宏毅教授《深度学习》课程第一章"机器学习介绍"的学习总结。内容基于个人理解整理,主要面向机器学习初学者,重点梳理核心概念与技术框架。

一、机器学习范式理解

1.1 基本定义

机器学习是通过数据驱动的参数化模型构建方法,其数学本质可表示为:

f ∗ = arg ⁡ min ⁡ f ∑ L ( f ( x i ) , y i ) + λ Ω ( f ) f^* = \arg\min_f \sum L(f(x_i), y_i) + \lambda \Omega(f) f=argfminL(f(xi),yi)+λΩ(f)

  • 模型假设:确定函数空间(如线性空间、非线性空间)
  • 评估体系:构建损失函数量化预测误差
  • 优化机制:设计参数搜索策略

1.2 核心组件对比

组件 技术要素 典型实现
模型架构 输入输出映射关系 线性回归、CNN
损失函数 预测质量评价指标 MSE、Cross-Entropy
优化器 参数更新算法 SGD、Adam

二、机器学习标准流程

2.1 典型工作流

原始数据
特征工程
模型构建
超参数调优
模型验证
推理部署

2.2 关键阶段说明

训练阶段

  • 输入:含标签数据集 D t r a i n = { ( x i , y i ) } i = 1 N D_{train}=\{(x_i,y_i)\}_{i=1}^N Dtrain={(xi,yi)}i=1N
  • 目标:最小化正则化损失 min ⁡ w 1 N ∑ L ( f ( x i ; w ) , y i ) + λ R ( w ) \min_w \frac{1}{N}\sum L(f(x_i;w), y_i) + \lambda R(w) minwN1L(f(xi;w),yi)+λR(w)

推理阶段

  • 输入:新样本 x n e w x_{new} xnew
  • 输出:预测值 y ^ = f ( x n e w ; w ∗ ) \hat{y} = f(x_{new};w^*) y^=f(xnew;w)

三、模型优化原理

3.1 梯度下降算法

参数更新公式推导:

w t + 1 = w t − η ⋅ E [ ∇ w L ( f ( x ; w t ) , y ) ] w_{t+1} = w_t - \eta \cdot \mathbb{E}[\nabla_w L(f(x;w_t), y)] wt+1=wtηE[wL(f(x;wt),y)]

代码实现要点:

# 以PyTorch框架为例
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
for _ in range(epochs):
    loss.backward()  # 反向传播
    optimizer.step() # 参数更新
    optimizer.zero_grad() # 梯度清零

3.2 学习率策略

策略类型 实现方式 适用场景
固定学习率 恒定参数η 简单任务
自适应学习率 Adam优化器 复杂非凸优化
退火策略 分段衰减 精细调参

四、泛化能力提升

4.1 过拟合现象

模型复杂度与泛化误差关系:

graph LR
A[模型复杂度] --> B[训练误差↓]
A --> C[验证误差先↓后↑]

4.2 正则化方法

L2正则化
L r e g = L o r i g + λ 2 ∥ w ∥ 2 2 L_{reg} = L_{orig} + \frac{\lambda}{2}\|w\|_2^2 Lreg=Lorig+2λw22

早停法实践

best_loss = float('inf')
for epoch in 100:
    val_loss = evaluate(model, val_data)
    if val_loss < best_loss:
        save_model()
    else:
        break  # 提前终止

五、实践案例:房价预测

5.1 线性回归实现

import torch.nn as nn

class HousingModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.linear = nn.Linear(13, 1)  # 波士顿房价数据集
        
    def forward(self, x):
        return self.linear(x)

5.2 训练监控

from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter()
for epoch in epochs:
    writer.add_scalar('Loss/train', train_loss, epoch)
    writer.add_scalar('Loss/valid', val_loss, epoch)

六、关键问题探讨

6.1 模型选择困境

  • 偏差-方差权衡:模型复杂度的双刃剑
  • 交叉验证:k-fold验证的合理应用

6.2 数据质量影响

数据问题 解决方案 工具示例
缺失值 插值处理 Pandas.fillna
维度灾难 特征选择 sklearn.SelectKBest
样本失衡 重采样策略 imblearn库

延伸阅读

  1. 李航《统计学习方法》第三章
  2. Bishop《Pattern Recognition》第1-3章
  3. PyTorch官方文档

版权声明:本文为作者原创学习笔记,依据CC BY-NC-SA 4.0协议发布,转载需注明出处并遵循相同协议

你可能感兴趣的:(机器学习,深度学习)