从上文我们可以看出,liner models 是太简单了,实际上很多问题并不是直线关系,我们需要更复杂的模型。We need a more flexible model!
Pieceewise liner curves = constant + sum of a set of liner models
分段函数 = 常数 + 很多直线函数的线性叠加
Sigmoid Function
y = c 1/(1+e^-(b+wx)) = csigmoid(b+wx1)
调整不同的c,b,w可以得到不同形状的s形曲线,去叠加得到复杂的模型。
New Model:More Features
★ y = b + Σci * sigmoid(bi+wi*xi)
★ y = b + Σci * sigmoid(bi+Σwij*xi)
其中 x:feature
b,ci,bi,wi是未知量,我们将所有的未知量拉成一个向量 a =[a1,a2,a3,......]
Loss 定义不变 ,与上文一样 L(a)
Optimization of new model
1.(Randomly)pick initial values a*(随机取值)
对每一个元素ai求导,g=▽L(a*)
2.更新a的方法与上文一样 a**=a*-η g(η是学习率 g是每一个对应的微分)
3.重复以上,直到达到规定次数或微分为0
1 epoch = see all the batches one
1 epoch是将所有训练样本训练一次的过程。如果样本过大,我们将分为多个分样本进行训练,1个分样本即为1个batches。
batches:一次训练所选取的样本数,Batch Size的大小影响模型的优化程度和速度。同时其直接影响到GPU内存的使用情况,假如你GPU内存不大,该数值最好设置小一点。
Example 1
10000 examples(N=10000)
Batch size is 10
则1 epoch更新1000次数据
Example 2
1000 examples(N=1000)
Batch size is 100
则1 epoch更新10次数据
上文提到的sigmoid即机器学习中的Activation function(激活函数),还有很多其他激活函数,在此不再一一举例。
以上网络即deep learning 深度学习!
参考 李宏毅《机器学习/深度学习》