持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第30天,点击查看活动详情
MLP同样也可以用于分类和回归任务,让我们看看他们都需要什么设置,以及在自己电脑上搭建一个TensorFlow Playgroud平台去可视化这些任务训练结果。
回归MLP
我们在执行回归任务时,如果预测单个值,MLP就只需要一个输出-预测值。同时也可以执行一些多元回归,每个输出维度都需要一个神经元,常见比如定位,可以输出坐标点,长宽数值等。
通常我们可以不去设置输出的激活函数,如果需要保证始终为正,则可以通过ReLU或者softplus激活函数(softplus(z)=log(1+)),当z为负时,它接近0,z为正时,他接近z。如果需要保证输出的预测值在一定的范围内,可以使用逻辑函数或者双曲正切。
典型的回归MLP架构
| 超参数 | 典型值 |
|---|---|
| 输入神经元数量 | 每个输入特征一个 |
| 隐藏层数量 | 一般1-5,取决于问题 |
| 每个隐藏层的神经元数量 | 一般10-100,取决于问题 |
| 输出神经元数量 | 每个预测维度一个 |
| 隐藏的激活 | ReLU |
| 输出激活 | 不设置,或ReLU/softplus 或 逻辑/tanh |
| 损失函数 | MSE或MAE/Huber(如果有离群值) |
Huber损失-当误差小于阈值,Huber损失是二次方,当误差大于,Huber损失是线性。当存在离群值时,线性部分敏感度低于均方误差,二次方比平均绝对误差更收敛和精确。
分类MLP
对于二进制分类问题,只需要使用逻辑激活函数的单个输出,范围在0-1之间,也是正类的估计概率。
对于多标签二进制分类,需要根据每个正类设置一个输出,以组成各种输出结果。例如邮件检测中,可以分成是否紧急和是否是垃圾邮件。
对于多类分类,比如MNIST的数字分类中,需要给0-9每一个类设置一个输出神经元,这时候需要使得每个概率在0-1之间,且和为1。可以使用softmax激活整个输出层。
典型的分类MLP架构
| 超参数 | 二进制分类 | 多标签二进制分类 | 多类分类 |
|---|---|---|---|
| 输入层和隐藏层 | 和上面回归相同 | - | - |
| 输出神经元数量 | 1 | 每个标签1 | 每个类1 |
| 输出层激活 | 逻辑 | 逻辑 | softmax |
| 损失函数 | 交叉熵 | 交叉熵 | 交叉熵 |
使用TensorFlow Playground进行可视化
通过之前讲的MLP基础,我们也可以在TensorFlow Playground上可视化。Playground是可以自己搭建的,GitHub地址如下tensorflow/playground: Play with neural networks! (github.com),需要做的就三步:
npm inpm run buildnpm run serve
出现如下图,我们就可以根据地址和端口去访问了:
图1 启动TensorFlow Playground
进入地址后,我们可以设置很多东西,比如学习率,激活函数,正则化,设置隐藏层和选择任务类型等等,如下图是我设置好的一个模型,并且训练682次后的可视化结果:
图2 结果可视化
快去试着玩玩吧!