神经网络在分类中的应用

我们知道,逻辑回归可以用来分类,但仅仅是对于特征量很少时,当特征量特别多时,就不适用了,所以引入了神经网络。

声明一下,当类别数C>=3时,输出层有C个结点,否则只用一个结点就可以了;激活函数就是非线性函数比如sigmoid、Relu等。

1.神经网络

首先了解一下单一神经元内部的构造(图片来源https://blog.csdn.net/tyhj_sf/article/details/79932893)我们可以看到,一个神经元里边做了两件事,计算theta的转置*x(此时theta是一个4*1的矩阵,x也是4*1的矩阵,经过计算得到一个数)第二件事是将算出来的值带入到sigmoid函数(logistics)中计算,然后将计算出来的值传递给下一层,理解了这个,再来看多个神经元就好理解了。

 

神经网络的代价函数

具体推导公式参考https://blog.csdn.net/CarryLvan/article/details/103120782

2.梯度检测

估计梯度值,对比其和自己代码算出来的值是否相丝(确保他们只有几位小数的差距),判断程序算出来的梯度值正确与否。(进行学习,或训练网络时要关掉梯度检验;计算量很大,速度慢,检测确定后要及时关闭)

3.随机初始 化

不管是梯度下降还是高级优化算法,都需要对theta进行初始化,建议用随机初始化(不能设置为0)范围在接近0的[-epsilon,epsilon]之内。

4.流程化总结

4.1选择一种网络架构(神经元之间的连接方式:隐藏层的层数和每一层的结点个数)

输入层:特征个数m

输出层:分类类别数o(转化成向量)

隐藏层:默认只有一个隐藏层,若隐藏层个数>1,那么默认每一个隐藏层的神经单元相等(通常情况下,隐藏单元越多越好,但需要相匹配,可以等于输入神经元个数,也可以是输入神经元的若干倍)

4.2训练神经网络的步骤

1)随机初始化权重(小到接近于0的值)

2)执行前向传播算法,得到预测结果

3)计算代价函数J(theta)

4)实现反向传播算法,求出偏导数项

5)梯度检测(注意不用时关闭)

6)使用梯度下降、最优算法LBFGS、共轭梯度法等来最小化代价函数J(theta)

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章