Alb*_*ego 11 performance machine-learning perceptron deep-learning
我试图找出如何调整感知器算法的参数以使其在看不见的数据上表现相对较好时遇到了一些问题.
我已经实现了一个验证工作的感知算法,我想找出一种方法,通过它我可以调整迭代的数量和感知的学习速度.这是我感兴趣的两个参数.
我知道感知器的学习速率不会影响算法是否收敛和完成.我正试图掌握如何改变n.它太快了,它会在很多地方摆动,而且太低而且需要更长的时间.
至于迭代次数,我不完全确定如何确定理想数.
无论如何,任何帮助将不胜感激.谢谢.
dou*_*oug 13
从少量迭代开始(实际上更常规的是计算'epochs'而不是迭代 - 'epochs'指的是通过用于训练网络的整个数据集的迭代次数).通过'小'让我们说50个时代.这样做的原因是你想看到每个额外的训练周期(时期)总误差是如何变化的 - 希望它会下降(更多关于下面的'总误差').
显然,您对下一个附加时期不会导致总误差进一步减少的点(时期数)感兴趣.因此,从少量时期开始,您可以通过增加时期来接近这一点.
你开始学习的速度不应该太细或太粗糙(显然是主观的,但希望你对大学习率和小学习率有一个粗略的感觉).
接下来,在您的感知器中插入几行测试代码 - 实际上只是一些很好的'print'语句.对于每次迭代,计算并显示增量(训练数据中每个数据点的实际值减去预测值)然后对训练数据中所有点(数据行)的各个增量值求和(我通常采用的绝对值) delta,或者你可以得到平方差的总和的平方根 - 无关紧要.调用该求和值"总误差" - 只是为了清楚,这是总误差(误差的总和)所有节点)每个时期.
然后,将总误差绘制为时期数的函数(即,x轴上的纪元数,y轴上的总误差).当然,最初您会看到左上角的数据点向下和向右倾斜并且斜率逐渐减小
让算法针对训练数据训练网络.增加时期(例如,每次运行10次),直到您看到曲线(总误差与纪元数)变平 -但是,额外的迭代不会导致总误差减少.
因此,该曲线的斜率是重要的,它的垂直位置也是如此 - 即,你有多少总误差以及它是否继续随着更多训练周期(时期)向下趋势.如果在增加时期后,您最终会发现错误增加,请以较低的学习率再次开始.
该学习率(通常约0.01和0.2之间的部分),肯定会影响到网络的速度有多快训练有素的-也就是说,它可以更快速地移动到你当地最低.它也可以让你跳过它.因此编码一个训练网络的循环,假设每次使用固定数量的历元(和相同的起始点),但每次改变学习率,例如0.05到0.2,每次增加学习率0.05.
另外一个参数在这里很重要(尽管不是绝对必要的),"动量".顾名思义,使用动量术语可以帮助您更快地获得训练有素的网络.从本质上讲,动量是学习率的乘数 - 只要误差率下降,动量项就会加速进度.动量项背后的直觉是" 只要你向目的地行进,增加你的速度 ".动量项的典型值是0.1或0.2.在上面的训练计划中,你应该在改变学习率的同时保持动量不变.