开始学习神经网络(Neural Network)
已有线性与逻辑回归,为什么需要用到NN
实际的应用中,需要根据很多特征进行训练分类器,当今有两个特征下,可以通过下图表述:
然而还有太多的特征需要考虑,假设这里有100个特征,包含他们所有的相关项后可能会有5000个,这种计算量很显然是非常大的,当然你可以仅保存\(x_1^2、x_2^2....X_{100}^2\),此时仅100个,但此时拟合结果很有可能出现underfitting。
NN模型表示
我们来看看我们如何使用神经网络来表示一个假设函数。简单地,神经元基本上是计算单位,其将输入(树突)作为被输送到输出(轴突)的电输入(称为“尖峰”)。 在我们的模型中,我们的树突像输入特征\(x_1、x_2...x_n\),输出是我们假设函数的结果。 在这个模型中,我们的\(x_0\)输入节点有时被称为“偏置单元”。 它总是等于1。
这里我们依然利用\(\frac{1}{1+e^{-\theta^Tx}}\)作为我们的逻辑函数(logistic function),有时称为s形激励函数(sigmoid activation function)。这里的参数Theta也被称为权重“Weights”
我们的输入节点(第1层)也称为“输入层”,进入另一个节点(第2层),最终输出称为“输出层”的假设函数。在输入层与输出层之间的部分我们一般称为隐藏层。在这个例子中,我们标注这些中间层或“隐藏”层节点\(a_0^2...a_n^2\)并将其称为“激励单元”。
\(a_j^{(j)}\)称为第j层中的第i个单元,矩阵\(\Theta^{(j)}\)描述的是第j层到第j+1层权重。下图反应了仅包含一个隐藏层的情况:
每个节点的”激励“(activation)按照一下计算:
这就是说,我们使用3×4的参数矩阵来计算激活节点。 我们将每行参数应用到我们的输入,以获得一个激活节点的值。 我们的假设输出是应用于激活节点的值之和的逻辑函数,它们已经乘以包含第二层节点权重的另一个参数矩阵\(\Theta^{(2)}\)。
对于权重矩阵的维度:
如果网络在层j + 1中有和\(s_{j+1}\)单元,层j中具有\(s_j\)单元,则\(\Theta^{(j)}\)将为尺寸\(s_{j+1}\)×(\(s_j\) + 1)。
如:在第一层有2个输入单元,第二层有4个激励点,那么权重参数\(\Theta^{(1)}\)的维度为4×(2+1)=4×3。
总结如下图所示:
接下来,我们将对上述函数进行向量化实现。 我们要定义一个包含我们g函数内的参数的新变量\(z_k^{(j)}\)。 在我们前面的例子中,如果我们用变量z代替所有参数,我们将得到:
换句话说,对于层数J=2中的第k个节点,变量z有:
\(z_k^{(2)}=\Theta_{k,0}^{(1)}x_0+\Theta_{k,1}^{(1)}x_1+...\Theta_{k,n}^{(1)}x_n\)
用向量表示为:
将输入x设置为\(a^{(1)}\),有以下等式:
\(z^{(j)}=\Theta^{(j-1)}a^{(j-1)}\)
最后有:\(h_\Theta(x)=a^{(j+1)}=g(z^(j+1))\)
请注意,在最后一步中,在层j和层j + 1之间,我们的做法与我们在逻辑回归中完全一样。 在神经网络中添加所有这些中间层使我们能够更优雅地产生有趣和更复杂的非线性假设。