一、机器学习
1. 基本概念
1)机器学习的分类
有监督学习、无监督学习、半监督学习
- 有监督学习:数据做标注,模型同时接受输入+输出,主要包括回归、分类问题
- 无监督学习:数据不做标注,模型只接收输入,主要包括聚类
- 半监督学习:有监督、无监督学习结合
基于模型的学习、基于实例的学习
批量学习、增量学习
2)机器学习的基本问题
- 回归问题:预测结果是连续的
- 分类问题:预测结果是离散的
- 聚类问题:无监督学习,根据样本的相似程度,将相似度高的划分到同一个聚簇中
- 降维问题:缩小数据的维度、规模
3)机器学习的一般过程
- 数据收集 → 数据清洗 → 选择模型 → 训练 → 评估 → 测试 → 应用及维护
2. 数据预处理
1)标准化:将样本处理为每列均值为0、标准差为1
2)范围缩放:将每列最小值转换为0,最大值转换为1
3)归一化:将数据转换为0~1之间的百分比(按行)
4)二值化:将数据转换为0/1两个值
5)独热编码:将数据转换为一个1和一串0
6)标签编码:字符串转换为数字
3. 回归问题
1)线性回归
线性模型:$y = w^T x + b$
线性回归:利用线性模型做回归(样本基本呈线性分布)
损失函数:度量预测值(模型计算)、真实值(样本)之间的差异
梯度下降法:沿着损失函数梯度相反的方向,对模型参数进行优化
$$
w_i = w_i + \Delta w_i \
\Delta W_i = - \eta \frac{\partial E}{\partial w_i}
$$两个变种
- Lasso回归:在标准线性回归损失函数上增加L1正则项
- 岭回归:在标准线性回归损失函数上增加L2正则项
2)多项式回归
- 多项式回归:引入高次项,用于样本呈非线性分布情况
- 多项式回归系数是线性的,可以理解为线性回归的扩展
- 欠拟合与过拟合
- 欠拟合:拟合程度不够,模型没有学习到数据的真实变化规律,表现为训练集、测试集下准确率都比较低。解决方法:增加模型复杂度、增加特征
- 过拟合:模型过分拟合与训练样本,导致泛化能力不足,表现为在训练集准确率较高、测试集下准确率较低。解决方法:增加样本数量、简化模型、减少特征数量
3)决策树回归
见分类部分
4)评价指标
R2系数
均方差
4. 分类问题
1)逻辑回归
- 定义:二分类问题,先利用回归模型预测一个连续值,然后通过逻辑函数离散化
- 逻辑函数(sigmoid):$y = \frac {1}{1+e^{-x}}$
- 损失函数:交叉熵
- 二分类模型实现多分类:多个二分类模型
2)决策树
- 定义:利用”同因同果”原理,构建一个树状结构,将具有相同属性的样本划分到同一个子节点下,利用投票法实现分类,求均值实现回归
- 信息熵:描述一组数据混乱或有序的程度
- 特征选取
- 信息增益:划分子节点前的信息熵、划分后的信息熵的差值
- 增益率:信息增益 / 固有熵
- 基尼系数
- 决策树的枝剪:预枝剪,后枝剪
- 集成学习
- 强关联:Boosting,AdaBoosting
- 弱关联:Bagging,随机森林
3)支持向量机
- 定义:二分类模型,寻找一个最优线性分类边界,使得支持向量(离分类边界最近的样本)到分类边界间隔最大化
- 分类边界的要求:正确性、公平性、安全性、简单性
- 线性可分、线性不可分
- 核函数:将线性不可分问题转换为高纬度空间下的线性可分
- 线性核函数
- 多项式核函数
- 高斯核函数
4)朴素贝叶斯
- 贝叶斯定理
$$
P(A|B) = \frac{P(A)P(B|A)}{P(B)}
$$
- 朴素贝叶斯:假设特征是独立的,利用贝叶斯定理计算属于每个类别的概率
5. 聚类问题
1)定义:无监督学习,根据样本的相似度,将其划分放到不同的聚簇,同一个聚簇样本相似度较高,不同的聚簇样本相似度较低
2)样本相似度的度量:距离
- 欧氏距离
- 曼哈顿距离
- 切比雪夫距离
- 闵氏距离
3)聚类的划分
基于原型(或基于划分)的聚类:如k-means
基于密度的聚类:DBSCAN
基于层次的聚类:凝聚层次
聚类算法的比较
比较项 K-Means DBSCAN 凝聚层次 类别 基于原型 基于密度 基于层次 聚类中心 有 无 无 是否提前设置K 是 否 是 噪声是否敏感 敏感 不敏感 不敏感 评估指标:轮廓系数
6. 模型评估与优化
1)分类问题性能度量
- 正确率(Accuracy): 分类正确数量 / 总样本数量
- 错误率(Error rate):分类错误数量 / 总样本数量
- 查准率(Precision):TP / (TP + FP)
- 召回率(Recall):TP / (TP + FN)
- F1:2 * 查准率 * 召回率 / (查准率 + 召回率)
- 混淆矩阵
2)交叉验证:将数据集划分成K个折叠,每次以其中一个折叠作为测试集,其它作为训练集,这样相当于获得了K个不同数据集。主要用于样本较少的情况
3)学习曲线、验证曲线
- 学习曲线:比较不同规模训练数据对模型影响
- 验证曲线:比较不同参数对模型影响
4)超参数的选择
- 超参数:不是通过学习得来的,而是通过经验、实验对比确定
- 决策树深度、叶子节点最少样本数量
- 正则强度
- 正态分布中期望值、标准差
- 随机森林树的棵树
- 学习率
- 网格搜索:将所有取值进行穷举组合,选出最优的组合
- 随机搜索:随机产生值,再进行穷举组合
二、深度学习
1. 感知机与神经网络
1)感知机:神经元,接收多个输入$x_1, x_2, …, x_n$, 根权重矩阵相乘,产生输入。可以作为分类器、回归器,解决线性问题;更多的神经元组成神经网络
2)神经网络:多个神经元组成的层状、有向五环结构。通用近似定理证明,神经网络只需要一个隐藏层,该隐藏层包含足够多的神经元,在激活函数作用下,能够以任意精度模拟任意连续型函数
2. 激活函数
1)作用:将神经网络输出由线性转换为非线性
2)常用激活函数
- sigmoid:平滑、连续;缺点是梯度消失
- tanh:平滑、连续;缺点是梯度消失;根sigmoid相比收敛速度跟快
- relu:计算简单,避免了梯度过大、过小的问题
- softmax:用于神经网络输出层,将神经网络输出层的数值转换为一组概率
3. 损失函数与梯度下降
1)损失函数:度量真实值、预测值之间的差异,用来评估模型的优劣
- 均方差:回归问题使用
- 交叉熵:分类问题使用
2)梯度下降:沿着梯度负方向逐步调整每个模型参数
4. 反向传播算法
1)作用:深度神经网络中求隐藏层的参数梯度
2)链式求导法则
5. 卷积神经网络
1)卷积:两个函数在某个维度上的加权叠加
2)卷积神经网络:加入了卷积操作的神经网络,一般结构:
输入 –> 卷积/激活/池化 –> …… –> 全连接
3)卷积神经网络各层的作用
- 卷积层:提取特征(主要作用)、降维
- 激活层:激活运算
- 池化层:降维,提升泛化能力。池化类型:max, average
- 全连接:分类器
- dropout:防止过拟合
- Batch Normal:防止梯度消失、防止过拟合、增加模型稳定性、加快收敛速度
4)经典卷积神经网络:LeNet,AlexNet,VGG,GoogLeNet,ResNet
三、计算机视觉
1. 数字图像基础
1)成像原理
2)图像存储方式:灰度图像单通道矩阵,彩色图像多通道矩阵
3)色彩空间:RGB, HSV, YUV……
4)灰度级:像素灰度值取值范围,当前采用的是256个灰度级
5)色彩变换
- 灰度化:彩色图像转灰度图像,平均值法、最大值法、加权平均值等
- 二值化:将灰度图像转换为只包含0/255两个值
- 色彩通道操作
- 灰度直方图、直方图均衡化处理
6)形态变换
- 仿射变换:简单线性变换,主要包括旋转、平移、镜像
- 透视变换
- 缩放:插值法(最邻近插值、双线性插值)
- 裁减
- 形态学梯度:腐蚀、膨胀、开运算、闭运算
7)梯度相关
- 模板运输:包括模板卷积、模板排序。利用不同的模板运算,能实现图像的模糊、锐化、边沿提取等等功能
- 模糊处理:中值滤波、均值滤波、高斯滤波
- 边沿提取:Sobel,拉普拉斯变换,Canny算法
- 轮廓查找、绘制
2. 深度学习图像识别
1)图像分类
- 过程:原图 –> 特征提取 –> 分类模型
- 分类模型:LeNet,AlexNet,VGG,GoogLeNet,ResNet
2)目标检测
- 原理:局部分类 + 回归(定位)
- 两阶段检测、一阶段检测
- 两阶段:先产生候选区,再做分类和回归。R-CNN系列
- 一阶段:直接分类和回归。YOLO系列、SSD
- 候选区域产生方式
- 滑动窗口法:检测精度高,效率极低
- Selective Search算法:图像算法,计算相邻区域相似度
- RPN网络:特征图上产生候选区域预测
- IOU:真实边框、预测边框交集与并集比率
- 多尺度检测与特征融合:在大小不同的特征图上进行检测;特征融合指将大小不同的特征图融合在一起
- R-CNN系列、YOLO系列
3)OCR专题
- OCR模型包含两部分:文字检测、文字识别
- 检测模型
- CTPN模型:适合做水平文字检测
- SegLink:适合做带角度文字检测
- 识别模型:CRNN + CTC
4)人脸检测与人脸识别
- 人脸检测:MTCNN
- 人脸识别:孪生网络、三元神经网络、DeepFace、FaceNet
5)图像分割
- 原理:对图片中每个像素进行分类
- 分割粒度:语义分割、实例分割、全景分割
- 评价指标
- 像素精度
- 平均像素精度
- 平均交并比
- 常用模型
- FCN
- U-Net
- Mask R-CNN
- DeepLab系列:空洞卷积、条件随机场、多尺度池化……
四、关于项目的问题
1)如何构建数据集
- 收集/采集数据
- 数据清洗
- 分门别类存放、标注
2)数据从哪里来?
- 历史交易发生过的数据(价值最高)
- 采集(时间、成本较高)
- 购买(很多数据买不到)
- 爬虫(合规性)
- 公共数据集(价值不高)
3)数据量究竟多大?
- 深度学习:数据量越多越好(单个类别达百数量级)
4)数据不够如何处理?
- 数据增强
- 选择在少量样本下性能不错的模型(SVM,U-Net)
5)样本极度不均衡如何处理?
- 对极少量样本进行过采样(直接复制)
6)选用的模型是什么?为什么?
- 根据实际问题以及问题的难以程度,首选现有的、经典的、成熟的模型。简单的问题选择简单模型,复杂的问题选择复杂模型
- 如果不确定使用哪个模型,通过实验对比择优选择
- 在有些情况下,可以采用多个模型配合使用,发挥各自特长
7)什么情况下选择纯图像,什么情况下选择深度学习?
- 纯图像:不需要理解图像内容;问题简单、图像变化较小、干扰较少
- 深度学习:需要理解图像内容和场景;问题复杂、图像变化较大、干扰较多、需要模型有较强的泛化能力
8)数据如何标注?谁来标注?
- 标注:分类问题、目标检测、分割问题标注方式不一样
- 谁来标注
- 大企业:专门标注人员或团队
- 中小企业:开发人员、技术团队自己标注
- 有些数据需要专业知识才能进行标注
9)模型训练时间
- 估算
- 实际项目中采用增量训练
10)为什么不采用xxx模型?
- 效果
- 最好说出模型的特点
11)模型如何部署、使用?
- 部署方式:服务器部署、客户端部署、嵌入式设备部署
- 封装成网络服务、封装成类/函数供用户调用
12)准确率是多少?
- 实际项目中一般达到95%以上
13)关于项目的细节
- 什么型号的GPU?
- 什么型号的工业相机?相机分辨率是多少?
- 相机如何安装?每秒钟多少帧?
- 项目几个人?如何分工?
14)简历中项目需要描述清楚的问题
- 需求:用在哪里?谁来用?解决什么问题?
- 数据集:来源、数量、预处理手段
- 模型选择、优化过程
- 过拟合、欠拟合现象?处理方式
- 效果
五、项目示例
1)芯片质检
- 样本:芯片高清图像
- 技术路线:OpenCV图像技术
- 技术点:灰度处理、二值化、膨胀、轮廓检测、轮廓实心填充
2)胶囊质检
- 样本:胶囊高清图像
- 技术路线:OpenCV图像技术
- 技术点:灰度处理、二值化、膨胀、模糊、霍夫变换、像素计算、轮廓查找/绘制/面积周长计算
3)瓷砖瑕疵检测
- 样本:1000多个瓷砖样本,包含7个类别(正常、空洞、裂缝、缺块、色板、刮痕、其它)
- 预处理:旋转、镜像增强后,达到4万个以上样本
- 模型:普通CNN
- 关键参数:输入图像256*256,学习率0.0001~0.00001
- 准确率:测试集下达到97%以上
4)目标检测项目案例
- 判断腰椎间盘突出
- 检测润滑油企业储油罐盖子处于开/关状态
- 检测输油管道关键节点是否漏油
- 检测高速公路上有没有滚石、滑坡、泥石流
- 检测高速公路隧道有没有裂缝、渗水
- 农作物、林地害虫检测
- 消防起火点检测(冒烟、起火)
- 发电厂冒烟、起火点检测
- 居民楼电动车入户检测
- 安检系统:检测违禁物品
5)图像分割
- 工业产品瑕疵区域检测与分割
- 检测道路病害(裂缝、龟裂、坑槽)