上一节讲了多标签识别,图像分割和data block,这之前讲的都是图像识别的方法,今天一节课把剩下的3种核心领域都讲了:自然语言处理,表格数据处理,协同过滤,并且把神经网络层与层之间的微观活动也都详细的描述了一遍,可谓是干货满满。
1.概览
- 首先是自然语言处理 NLP(Natural Language Processing ),主要讲解通过迁移学习来实现IMDB评论的正负面情绪分辨;
- 然后是根据个人信息的数据,预测哪些人可以获得高薪;
- 最后是协同过滤,在用户喜欢了一些电影之后,可以预测某个他没看过的电影是否会喜欢。
2.1核心流程
NLP - IMDB情绪分析大概需要3步,建立宏观的语言模型,利用的是Wikipedia的数据训练的模型;然后是根据IMDB的数据训练定向的电影行业语言模型;最后是用训练好的语言模型,训练一个正负面情绪的分类器。
表格数据处理-薪资预测:主要是把类别变量转化成连续变量,比如职业、婚姻情况等……会转化成0,1,2这样的数字;然后通过processor进行预处理,然后就可以训练了。
协同过滤-推荐喜欢的电影:流程都一样,只不过使用特殊类型的CollabDataBunch,以及特殊的collab_learner。
2.2核心机器学习概念
- 参数 weights/parameters:用于计算的参数/权重矩阵
- 激活 activations:计算后的结果,包含矩阵运算后的结果和激活函数运算后的结果
- 激活函数 activation functions:一般是ReLU函数,只改变内容不改变size
3.1实例详细分析(NLP)
建立宏观的语言模型,利用的是Wikipedia的数据训练的模型(Wikitext 103);
- "I'd like to eat a hot ___":
- Obviously, "dog", right?
- "It was a hot ___":
- Probably "day"
- 不需要label,因为每个next word都是一个label,这种方式叫自监督学习;
然后是根据IMDB的数据训练定向的电影行业语言模型;
- 准备数据:read from csv
- token化:把一句话拆成一个个词,不常用的词会用xxunk,xxpad之类的统一代替,成为vocab词汇表
- 数字化:把一个个词,转化成一个个数字,像这样array([ 43, 44, 40, 34, 171, 62, 6, 352, 3, 47])
- 创建databunch
- 创建learner:会用到dropout和regularization参数,之后会讲
- 训练:得到的模型叫encoder
- 调整
最后是用训练好的语言模型,训练一个正负面情绪的分类器;
- text_classifier_learner
- learn.load_encoder
- freeze_to:解冻后几层,而不是全部解冻,这样可以训练处更高的准确率
3.2实例详细分析(tabular & collab)
流程上没什么新东西,就不展开来说了
3.3原理详细分析(神经网络训练过程)
整个过程如下图,先输入一个[10,20,30]的vector,然后和一个3*N的矩阵相乘,得到一个结果,再把结果用激活函数处理成更剧本特征量的结果,在进行矩阵乘积,直到最后的输出。
输出结果一般会使用sigmoid函数将其转化成0,1区间内的额值,然后再和验证组的数据进行比对,求loss,然后进行SGD,最后得到了一个93%准确度的拟合出的函数。
Jeremy还用excel演示了一下这个过程,真的是对大神佩服的五体投地,用excel训练神经网络,对就是这样。
首先这里是用于训练的数据,14号用户对27号电影的评价是3颗星,满分5颗星。
然后随机生成了2组矩阵,分别给用户和电影,相当于weights
实验的目标是要预测空白处的值,比如293号用户对49号电影的评价是几颗星?
下面开始初始运算,运用点积运算,将每个空格填上,其实就是2个矩阵的矩阵乘积的结果
这时候就可以看第一次运算的结果和实际结果的偏差,计算出的loss是2.81,接下来去调整weights然后降低loss,即SGD的过程,就可以得到一个好的模型了。
4.最后
这一期可能需要多看两遍,反正我是2-3遍之后才能基本吃透里面的概念,因为一开始真的没那么好懂。
閱讀更多 增長浩克 的文章