背景:写于20190408,大概一周前我已经看到了P47 8-4 - Model Representation II
视频链接:https://www.bilibili.com/video/av9912938/?p=47
目前记录到了第47P,后面会继续看继续更新
1、下图为P7 2-2 2:10中的关于代价函数的例子,P31 5-5中会用到
2、这是2-7 00:34的内容,右边为线性回归中的线性假设公式和平方差成本函数,左边为梯度下降法
这个是梯度下降法的更新过程,注意两个方框中圈起来的是分别对theta0和theta1的偏导,第一个后面其实有乘以一个x(i),但是因为它是x0 = 1,所以可以省掉。
3、5-6中的内容,就是为了表示梯度下降这个式子最终的结果就是一个n+1维的向量
其中,请注意
x(i)上标的i是对某一个theta更新的时候m个相加的,也就是横着看
而x(i)j中的下标j则是对于每一个theta的,也就是竖着看
4、6-5中写出了代价函数cost()的表达式,两种写法是完全等效的,下面的更加紧凑,代表的意思是预测不对的时候将会有大的惩罚,用log函数的原因在于预测正确的时候cost函数等于0,即没有惩罚,预测不对的时候,cost函数趋近于正无穷,这时候用了最大的惩罚。
5、我们发现逻辑回归函数的梯度下降公式和线性回归的梯度下降公式是一样的,但是h(x)的公式是不一样的,蓝色为线性回归,红色为逻辑回归
6、6-7中利用线性回归做“一对多”分类
其实就是将我们想要分出来的这一类当做类别i,当我们在给定先验知识x和theta之后,这个线性回归公式就代表把y = i分类出来的概率。
我们要做的就是在我们的三个分类器中输入x,然后我们选择一个让h最大的i,基本的挑选分类器的方法就是:选择出哪一个分类器是可信度最高、效果最好的,那么就可以认为得到一个正确的分类,无论i值多少,我们都有最高的概率值,我们预测y就是那个值
7、7-2中的内容:右边那一项是一个正则化项,λ是正则化参数(regularization parameter),λ要做的是在两个不同的目标中找到一个平衡关系,第一个目标就是我们想要训练模型使假设更好地拟合训练数据,我们希望假设能够很好地适应训练集;而第二个目标是我们想要保持参数值(即theta j)较小。
也就是说,我们最终的目标是要将J(theta)即cost function最小化,其中第一项是原cost function,第二项的最小化则是减小各个参数,那么cost function的两项都需要最小化,而λ则是控制参数平方和在新的cost function中的比重,由于不清楚哪些参数对应的是最高项,因此选择减小它们的平方和,如果λ大,则最小化J(theta)的时候就会大力减小参数,如果λ小,则最小化J(theta)的时候就会大力减小原代价函数。
我们只惩罚theta 1 ~ theta n,但我们不惩罚theta 0,这里对应了后面的梯度下降公式的不同之处。
这个就是上面所说的带有惩罚项的梯度下降公式,对正则项每次对θj进行求导,那么其余的θi(i!=j)的项就相当于是常量,因此最后求导出来的是一项θj,而不是求和。浅蓝色的J(θ)是带有正则化项的代价函数。
我们能看到上式中等号右边有两个theta j,因此我们将两个theta j整合一下就有了下边这个式子
正则化逻辑回归问题的梯度下降法的原理:当我们使用正则化线性回归时,我们需要做的就是在每一个被正则化的参数theta j上乘以了一个比1小了一点点的数字,也就是把参数压缩了一点,然后我们还执行跟以前一样的更新(因为减号后面的公式没变)
8、7-3中提到了theta的公式,我在4-6中找到了这个公式
由于x * θ = y,所以解出来θ就是这个式子,你不要把这个式子简单的想成是θ0 + θ1 * x = y,而是应该想成是θ0 * x0 + θ1 * x1 = y,并且θ不止这两个,x也不止这两个,即θ0 * x0 + θ1 * x1 + θ2 * x22 + ...+ θn * xnn= y,其中θ0 = 1,于是可以写成两个向量相乘的形式等于y这个列向量,于是简写就有了x * θ = y。
9、加了正则项的θ的公式,没有推导过程,但是加了正则项之后,使得括号中的项成为了可逆的,原来的XTX是不可逆的,因为m<=n。
10、逻辑回归问题的带有正则化项的代价函数,cost function来源见4。这个正则化项求和将j从1开始,而不是从0开始,累积θj的平方。加了这一项之后,即使用到了很多参数的高阶多项式来拟合,只要使用了正则化方法,就能约束这些参数使其取值很小,因此就能可能得到如图的那条紫红色的更合理的分界线,即正则化可以帮助你避免过拟合的现象。
11、接下来我们讨论如何在更高级的优化算法中使用同样的正则化技术。对于这个高级的优化算法,我们需要自己定义costFunction函数。
这个函数有一个输入向量theta,theta的格式依旧是从theta 0 开始直到theta n,但是在MATLAB或者是octave中向量索引是从1开始的,因此我们将theta 0记作theta(1),将theta1记作theta(2),以此类推,我们要做的就是将这个自定义代价函数(即这个costFunction函数)带入到我们之前学过的fminunc函数中,括号里面是@costFunction,将@costFunction作为参数代入,fminunc返回的是costFunction函数在无约束条件下的最小值,因此这个式子将求得代价函数的最小值。
costFunction函数有两个返回值,这里我们需要自己补充代码,我们这里使用的是正则化逻辑回归。
12、哈哈哈,感谢老师的鼓励。
哈哈,终于看到神经网络啦!!!2019/3/29,15:59.
13、这是一个单一神经元,输入相当于树突,输出相当于轴突,而这个神经元要做的就是原来hθ(x)这个函数的功能。其中这里hθ(x)函数使用了激活函数g(x),而我们前面熟知的θ作为“参数”的名称将被替换成“权重”,其实只是名字换了,本质没有改变。
最后,我们将讨论一个关于神经网络的术语:这是一个有S型函数或者逻辑函数作为激励函数的人工神经元。
14、ai(j)表示第j层的第i个神经元或单元读入后计算并输出的值,此外我们的神经网络被这些矩阵参数化,θ(j)表示一个权重矩阵,控制着从第j层到第j+1层的作用,所以这张图所表示的计算如下面的四行公式:即(绿色那个)第2个隐藏单元等于S函数作用在这个线性组合上的值,在这里我们有三个输入单元和三个隐藏单元,这样一来参数矩阵控制了来自三个输入单元和三个隐藏单元的映射,因此θ(1)的维数是3 * 4。原理可以看最下面的那行英文。
从弹幕里面学到的知识:每层都有一个偏置单元,只是其对于输出的影响与输入无关,所以不必计入前一行的行数中去。
而我们的hθ(x)函数就是表示的第三层的第一个神经元的激励输出。