Logo
Section 1 / 8

为什么机器学习具有特殊性

了解机器学习与传统软件的区别。

导入

为什么机器学习具有特殊性

了解机器学习与传统软件的区别。

针对机器学习的软件特性

在传统软件中,缺陷通常表现得更为明显。而在机器学习(ML)软件中,缺陷更容易被掩盖。考虑以下代码片段,它来自一个计算机视觉处理流程中的简单函数:

1def extract_angle_from_warp_matrix(rotation_matrix: np.ndarray) -> np.float: 2 # 从变换矩阵中提取旋转角度(单位:度) 3 return np.rad2deg(np.arctan2(-rotation_matrix[1, 0], rotation_matrix[1, 1]))

即使是代码的编写者(可能熟悉该领域的人)也可能难以判断这段代码是否正确。rotation_matrix[1, 0] 前面的负号 - 是必要的吗?这个数组的结构是什么样的?如果没有额外参考资料,我们可能很难准确回忆。

对于传统软件,问题通常更直观,运行代码或仔细阅读代码往往就能发现错误。然而,在机器学习相关软件中,缺陷可能长期未被察觉,最终影响模型的性能。

动手尝试

请检查下面的代码是否存在缺陷。如果存在,请根据提示尝试修复该问题。

1from skimage.transform import AffineTransform 2from skimage.data import astronaut 3 4import cv2 5import numpy as np 6 7# 1. 找出这段代码中的缺陷 8# 2. 完善测试代码以检测该缺陷 9# 3. 修复该缺陷,确保测试能够通过 10 11def aligned_image(image: np.ndarray) -> np.ndarray: 12 transform = AffineTransform(rotation=np.deg2rad(45)) 13 width, height, channels = image.shape 14 aligned = cv2.warpPerspective(image, transform.params, dsize=(width, height)) 15 return aligned 16 17 18def test_aligned_image(aligned_image: np.ndarray) -> None: 19 image = astronaut()[:300, :, :] 20 aligned = aligned_image(image) 21 assert ...

机器学习软件中的常见缺陷

以下是机器学习相关软件中一些常见的典型问题:

  • 训练/测试阶段或研究/生产环境之间预处理方式或特征工程不一致。
  • 数值计算问题(例如除零导致的溢出或 nan 值)。
  • 错误使用数组维度或出现意外的广播行为。
  • 在图像处理中混淆 x 和 y 坐标(或将 width 与 height 混淆)。
  • 不同库之间的接口或行为不匹配。
  • 欠拟合与过拟合问题(包括数据泄露)。
  • 模型漂移(概念漂移、数据漂移以及上游数据变化)。

以上列表并不完整,但这些问题是在实际开发中最常遇到的几类缺陷。

最佳实践与最差实践

行为测试