#####################
适合对算法的数学描述有一定理解的童鞋看~~
对TensorFlow中直接封装好的算法的具体python实现,补充另一个分类中的知识
参考书籍: 《机器学习实战》等
有些代码我自己也有问题,思考中已经解答的问题和一些坑我会注意说明的。也欢迎大家提出问题,相互交流进步
学习之后记录博客,对自己起到supervised learning的作用 :)
大家一起学习,进步,享受深度学习的乐趣吧!
需要引用的数据集,以及完整代码,放在github上,与这个的标题一一对应的~
https://github.com/Skyorca/csdn-
#####################
1. 万物伊始
作为机器学习算法的开篇之谈,让我们简单谈一下相关的背景知识。注意,我用的词语是“机器学习”,而不是“深度学习”!也就意味着我更多地会去实现传统的内容,而涉及到搭建各种神经网络慢慢地会用TF去做。
这张图大概告诉了我们,机器学习是要做什么。而目前我的进度还停留在回归上。所谓的回归,就是找出一条数据的最佳拟合曲线。找到曲线之后,我们可以做预测,也可以做分类。比如经典的sigmoid函数,我们可以以0.5为准,上下分成两类来实现最简单的分类器。回归又分为线性的和非线性的。当然,线性回归基本只停留在课本的前几页上,因为它的描述能力太弱了。比如加一个二次项,它的描述力就会极大增强。这里我们选择对线性模型施加非线性激励的方法。
说到非线性激励,它就有很多模型可以选择了。最常见的,除了sigmoid外,还有ReLU,softmax等等,不过那些都是后话。这里还是谈到sigmoid函数。它有两个好处:
1.输出值都在【0,1】区间,很实用
2.求导简单,s'=s(1-s)这样。稍后就会看到它的优势。
2.过渡
那么就有一个问题:为什么梯度下降算法被封装在了TF中呢?大概就是:对于一个网络,训练时有前传和后传两个过程。向后传递(反向传播)时,就需要用到梯度下降去最小化损失函数,完成一个训练过程。之后用得到的新参数继续投入轰轰烈烈的“前传--后传”训练中来。所以我们有必要亲自实现一遍如此基本重要的算法,而不是直接用它封装的东西就草草了事。大家在我的TF分类中也会看到它在BP神经网络中的应用。
3.简单复习梯度下降的数学基础
<