这个书各位大佬都很熟悉,我就不多说了。这个系列的文章肯定不是很长,整个整合到 机器学习-笔记目录
e.g:机器学习中的特征是人为设定,而深度学习则不是。 红色为人参与,灰色无人参与
这个章节比较重点的地方,这里跟机器学习很类似的一个地方就是如何去衡量一个学习程度。 神经网络以某个指标去寻找最优权重参数,这就是损失函数,损失函数可以用任意函数,一般情况下用均方误差或者交叉熵
跳过4.3的数值微分部分,直接说4.4的代码。 这节直接给了一个simplenet的例子,从例子来学习。这段会一步一步说。借助这个例子来谈4.3
实在找不到什么好工具来画这个图了,只能用CAD了,,原谅我。。。。 https://download.csdn.net/download/qq_42731466/10747534 上面的链接是图,需要补充或者扩展的自行下载。
因为这个代码不是一个文件,在多个文件里面跳转,这样清晰多了。。 主结构里面代码实际上只有三句,一句赋值分别是x和t的接受初始信息和正确解的标签,第二句是类的调用第三句是计算梯度并返回。 . 1.代码在M块开始(Main),M触发了内部的一个类C1(class1缩写),net被simpleNet实例化成为对象,并获得了.W属性。 2.labmda匿名函数这里只是申明。(注意:此时并没有调用net里面的方法) 3.numerical_gradient作为外部函数被调用,
3.1-进入外部模块F1,计算数值梯度,注意 np.nditer是个迭代器返回索引,执行次数就是矩阵的大小。它的进行就是分别对初始化.W的权重进行梯度计算。
3.1.1——计算至fxh1的时候触发f的lambda匿名函数,此时又触发C1,实例化的net中loss方法被调用
3.1.1.1——计算至.predict调用自身的方法,x和W进行矩阵乘法得到1X3的矩阵,赋值给z,此时得到的是接收的信息x和权重W的内积,意味3个神经元分别接收的信息总和。 3.1.1.2—— 触发外部函数F21的softmax,对z采集的三组信息进行概率分配。注意:这里有一个技巧性处理 3.1.1.3—— 触发外部函数F22的cross_entropy_error,如果接收的y矩阵维度是1则会触发reshape进行调整,调整为(1*t.size),成为一个2维矩阵,注意矩阵大小为2和维度大小为1X2是不同的维度。argmax()方法按行返回最大值对应的索引。最后计算并返回交叉熵给C1
3.1.2——计算至fxh2再次触发f和3.1.1相同 3.1.3——grad[idx]计算的就是数值梯度,这里是一维,很方便。it.iternext()对索引进行一次递增,否则一种计算第一个索引对应值的梯度。
3.2——最后返回梯度值
4.显示结果 . 所以归根结底,这套代码就是计算梯度的。
总体而言,前面1,2步都是在做预处理,真正执行入口在F1,然后根据softmax返回概率矩阵,根据概率计算损失函数cross_entropy_error的梯度。返回梯度。
问题 深度学习和机器学习的关系是什么?
补充:
P82-Q18,感知机收敛定理?如何理解“通过有限次数的学习,线性可分问题是可解的”? P82-Q18,深度学习和机器学习的本质区别? P83-Q19,在计算机视觉领域所说的特征量指的是什么?SIFT、SURF、HOG指的是什么? P83-Q20,转化成向量使用SVM、KNN分类器是什么意思,分类器本身是什么意思? P84-Q21,什么是过拟合? P95-Q24,中心差分是如何减小误差的?
更新 2018.10.27. ——更新至109/119,还缺少一个代码图以及分析。
