多神经元神经网络
之前编写的对猫的识别的算法准确率仍然不是很高,主要是因为其是单神经元网络,太过简单,层数太低。
神经网络分为单神经元和多神经元,多神经元神经网络又分为浅层和深层,下面介绍一下多神经元网络中的若干概念。
多神经元神经网络概述
多神经元网络流程是同单神经元网络相同的,只不过层数更多。下面是一个多神经元神经网络,其中间多了一层,但实际中可能远不止一层:
- 最左侧负责输入的特征叫做输入层
- 最右侧输出的叫做输出层
- 而中间的所有曾叫做隐藏层
多神经元网络与单神经元网络
先来复习一下之前学过的单神经元神经网络:
运算流程:
再来对比一下多神经元网络,我们把多神经元网络单个拆分成一个一个单独的神经元来看:
其具体运算流程如下:
我们先算出第一层(不带输入层)的3个神经元的,然后再将这3个当做输入到第二层的神经元中进行计算。上面的表示的是第一层的神经元关于输入层的权重,所以是一个的矩阵,因为第一层有3个神经元,每一个神经元都有3个特征输入,共计。
反向传播计算也一样,先算出第二层的梯度和,然后再向第一层传播,算出第一层3个神经元的和。
超参数调参方法
像神经网络的层数、每层神经元的个数都是超参数,和前面提到的学习率一样,需要慢慢调才能找到一个最合适的值,调的方式大概有几种:
- 网格搜索/穷举搜索
在高维空间不实用,复杂度过高 - 随机搜索
很多超参是通过并行选择的,它们之间是相互独立的。一些超参会产生良好的性能,另一些不会。 - 手动调参
主要是靠各位调参侠的经验了 - 自动参数寻优(Auto Machine Learning)
这是目前比较新的一个方向,比较成熟的框架有Auto-Skleran
其实最主要用到的还是手动调参,不同的项目背景下有不同的原则,建议从一个较小数值开始,如
果欠拟合然后慢慢添加更多的层和神经元,如果过拟合就减小层数和神经元。