一、为什么需要大数据
- 背景:如果模型表现 欠拟合(高偏差),增加样本数量能缓解模型的欠拟合问题。
- 挑战:使用标准梯度下降在大规模数据集上非常慢,一次迭代就需遍历所有样本,计算代价巨大。
- 解决方案:
- 先用学习曲线检查是否有必要用整个数据集;
- 如果需要,则采用更高效的优化方式。
二、随机梯度下降
算法思想
- 传统梯度下降基于全量样本计算梯度 ∇J,全局一致但计算昂贵。
- SGD 每次只从一个样本计算梯度并更新参数,即时启动迭代,计算量和内存需求都大幅减少。
SGD 步骤
θ := 初始化参数
Repeat {
随机打乱训练集
for each (x⁽ⁱ⁾, y⁽ⁱ⁾) in 训练集 {
计算梯度 g := ∇_θ J(θ; x⁽ⁱ⁾, y⁽ⁱ⁾)
更新 θ := θ − α * g
}
}
原理分析
- 更新方向有噪声(来自随机样本),但长期累计仍趋近全局最优。
- 不必等待完整代价计算就能快速逼近,可以提前观察收敛趋势。
三、小批量梯度下降
- 每次用一个小批量(batch)样本计算梯度并更新,做出折中方案。
- 优势:
- 可应用向量化和并行计算,高效;
- 波动介于批量和随机之间,收敛更稳定。
四、学习率调节与 SGD 收敛分析
评估收敛的方法
- 不适合买入绘制完整代价曲线,可采用滑动窗口策略:每隔一段迭代计算最近一批次平均代价,然后绘图。
学习率调整
- 如果曲线震荡:降低 α;
- 若无下降趋势:可能模型设定错误;
- 若曲线抖动但下降:正常可接受;
- 如上升趋势明显:α 过大,应立即减小。
动态学习率
随着迭代次数 t 增大调整学习率
α : = α 0 1 + k ⋅ t \alpha := \frac{\alpha_0}{1 + k\cdot t} α:=1+k⋅tα0
帮助算法在靠近最优时收敛更稳定。
五、在线学习
适用场景
- 数据流式输入(如网站点击、在线交易),数据量巨大且实时。
原理 + 示例
- 与 SGD 类似,但不依赖全集,仅一条一条学习,且立即丢弃样本,节约空间。
- Example:快递报价预测:接收用户询价,立即调整模型。
原理要点
- 可适应用户偏好动态变化;
- 实时反馈机制,适合推荐系统、动态定价、广告竞价等场景。
六、MapReduce & 数据并行
核心思路
- 将整体任务分成子任务 → 多节点并行处理 → 汇总(Reduce)。
- 梯度计算能拆分为样本的梯度求和。
可视化流程
Master:
指派任务 → 多个 Worker
Worker:
各自计算梯度
Master:
聚合梯度 → 更新参数
关键价值
- 利用高速网络与分布式硬件,加速计算;
- 适用于可拆分计算的线性/逻辑回归、神经网络、矩阵分解等。
七、整体流程与任务拆解
OCR 系统拆解为 3 大模块:
- 文字检测:识别图中存在文本的大致位置;
- 字符切分:将文字区域分割成单字符图像;
- 字符分类:识别每个字符的真实内容(字母/数字…)。
每个环节都可能使用分类或深度学习模型。
八、滑动窗口检测机制
- 对整张图使用固定大小窗口滑动;
- 每次 window crop 后分类是否包含文字;
- 使用多尺度象素金字塔扩展可检测不同大小的目标;
- 交并比合并重复区域,过滤宽高比异常窗口。
原理归纳
- 滑窗方式将检测拆为大量 “是否包含对象” 的分类任务;
- 可以用 CNN、SVM、逻辑回归做二分类;
- 自上而下设计 pipeline;当前的 YOLO/SSD 也是类似原理。
九、数据扩充策略
两种方法生成海量数据
- 人工合成:使用不同字体+随机背景生成字符图片;
- 增强法增强:对真实样本进行模糊/扭曲/旋转模拟现实。
原理说明
- 用人工变换扩充训练集维度,减少模型对数据不足的依赖;
- 提升模型鲁棒性,减轻过拟合。
十、上限分析
方法步骤:
- 手动将某一模块置为 “理想输出”;
- 评估整体性能提升;
- 判断改进收益,优先优化该模块。
举例效果
- 文字检测若变成100%正确,系统准确率可提升最显著;
- 字符分割改善效果较小;
- 字符分类若完美(100%识别),也能显著提升整体性能。
原理逻辑
- 识别系统中每个模块的性能增量;
- 聚焦瓶颈,合理分配资源。