传送门:
Python深度学习(第一部分)
Python深度学习(第二部分 -1)
Python深度学习(第二部分 -2)
写在前面
目前: Keras版本: 2.4.0
2
第一章 什么是深度学习
- 人工智能: 将通常人类完成的智力任务自动化.(PRA)
- 机器学习: 通过训练,使得程序能够"学习"到程序员预先编写之外的规则. (图像分类,语音识别,语言翻译)
- 深度学习: 强调从联系的层中进行学习,且层数较多(上百个). 分层表示学习(layered representations learing),层级表示学习(hirarchical representations learning).
机器学习三要素: 输入数据点(编码),预期输出的示例(样本),衡量算法效果好坏的方法(调整).
学习指寻找更好数据表示的自动搜索过程.
深度学习工作原理:
深度学习的场景:
接近人力水平的视觉,听觉(图像识别,语言识别,翻译,自动驾驶,下棋)
注意: 作者很严谨地用了"接近人力"的说法
机器学习历史:
- 概率建模(朴素贝叶斯,logistic回归)
- 早期神经网络(50年代开始,直到80年代重新发现反向传播算法,进入实践应用)
- 核方法: 一组分类算法,支持向量机(寻找决策边界),利用核函数可应用简单分类问题,但是难以扩展到大型数据集,也难以用于图像分类.
- 决策树、随机森林、梯度提升机:其中梯度提升方法,通过迭代训练模型解决之前模型弱点,目前处理非感知数据最好的算法之一。
- 回到神经网络(2010年出现重大突破)--深度卷积网络(convnet),并在自然语言处理,计算机视觉等方面取代SVM与决策树。
理由:其他方法,对于初始输入数据有较高要求,必须手工为数据设计好表现层(特征工程),而深度学习可以自动完成。通过分层(特征维度扩展)一次性学习所有特征,简化了机器学习的工作流程。(工程化可能)
之前为什么不做?深度学习一次性“贪婪”共同学习所有表示层,自然而然带来计算量的增加,而之前也没有好的硬件实现。(直到NVIDIA的GPU推出CUDA),同时数据集也随着Google,ImageNet等基准化了。(Google的认证码还是识别红绿灯,人行道,小轿车-用脚趾头也知道是在做自动驾驶的识别),另外算法也进一步改进(激活函数,权重初始化方案(预训练),优化方案等出现)
第二章 神经网络的数学基础
- 初识
Minist数据集,识别28*28的灰度图像,作为深度学习的"hello world".
加载数据,网络结构,编译参数,执行Fit.
- 神经网络的数据表示
张量(Tensor): 数据存储的多维Numpy数组.它只包含数值,是数字的容器. 图像是4D张量,视频是5D张量
轴的个数(ndim)
形状(sharp)
数据类型(dtype): float32,uint8,float64
数据操作: 切片,数据批量
- 张量运算
逐元素计算(relu,加法),广播(补齐),张量点积(内积),张量变形
深度学习的几何解释: 为复杂的,高度折叠的数据流找到简洁的表示(降维)
- 神经网络的"引擎": 基于梯度的优化,本书数学符号不多,幸好已经看了其他书,这块理解起来没有那么难.
随机梯度下降: 选取随机的样本进行梯度下降(适用于样本远大于参数个数),由于并非每次都考虑到全局,准确性小于批量SGD.
动量方法: 增加速度的考量,避免现陷入局部极小值.
第三章 神经网络入门
- 神经网络剖析
层: 深度学习基础组件(全连接层,循环层)-层兼容性
模型: 层构成的网络(双分支,多头,Inception模块)
损失函数与优化器: 衡量目标与调整学习的重要模块(反乌托邦的比喻还是挺幽默的)
- Keras
模型级(model-levl)库,并不处理张量操作,求微分等低层次的运算.后端引擎可选TensorFlow,Theano,CNTK.
- 建立深度学习工作站
Jupiter笔记本,云端服务器,GPU
- 电影评论分类
数据准备: 评论转换为按照字典的序列(深度学习不关心单词本身的含义).
构建网络: 使用Relu激活的Dense简单堆叠.
方法验证: 训练损失随着迭代次数变小,但是验证损失并没有(出现过拟合)
- 新闻分类
单标签,多分类;多标签,多分类
数据准备: 同4的方式,转换为one-hot编码
构建网络: 使用64个核的中间层
损失函数,优化器: 分类交叉熵,rmsprop
方法验证: 9层最优,之后过拟合.
- 预测房价
数据准备: 样本较少,使用13个数值特征;加入数据标准化过程
构建网络: 2个隐藏层,每层64单元,数据少->网络小
损失函数: 均方误差(MSE),平均绝对误差(MAE)
方法验证: K折验证,调整参数(迭代次数,隐藏层大小)
第四章 机器学习基础
- 机器学习的四个分支:
监督学习,无监督学习,自监督学习,强化学习.
其中强化学习可以让机器对环境(游戏,棋盘,路况等)产生反馈,是现在研究热点
- 评估机器学习模型
机器学习是基于训练集数据展开的,但是其目的是要应用于其他数据(测试集),也就是说需要一个泛化(generalize)的模型.然后随着对训练数据的多次迭代,其必然会更加倾向于只适用于训练数据,这就是过拟合.
- 留出简单验证
- K折验证(分区,评价,汇总) -- 小样本
- 带有打乱数据的重复 K 折验证 -- 计算代价大
数据划分的注意事项: 数据代表性,验证集与训练集不相交,时间箭头
- 数据预处理、特征工程和特征学习
向量化,值标准化,处理缺失值
特征工程:(这个很重要),以识别钟表时间为例,好的建模可以大大加快机器学习速度(甚至不用到机器学习,简单计算即可)
- 过拟合与欠拟合
机器学习的根本问题是优化和泛化之间的对立.
- 减小网络大小(加大特征压缩)
- 添加权重正则化(L1,L2)
- 添加 dropout 正则化(有效,随机拿掉一些,避免有的权重过大,影响其他神经单元)
- 机器学习的通用工作流程
-
定义问题,收集数据集 (这里可能需要一些爬虫技术)
明确输入,并且假设输出是可以根据输入预测的(彩票啥的,就别瞎想了);同时假设输入足够多到可以建立输出与输入的关系.
也就是说,机器学习本质上是归纳(对现有知识的特征提取),并没有产生新的知识.
选择衡量成功的指标(Kaggle 网站有各种问题的各种指标)
确定评估方法
准备数据(数据格式化为机器学习需要的张量数据)
开发比基准更好的模型(基准一般指纯随机结果)
三个关键参数:最后一层的激活(sigmoid),损失函数(binary_
crossentropy),优化配置(rmsprop)扩大模型规模:开发过拟合的模型
模型正则化与调节超参数(主要耗时处,参数需要不断试错)
训练最终的生产模型,然后在测试集上最后评估一次