Day-04 Python 的 Gradient 计算

  • 在开始使用 Framework 之前,我们还是得先看看有没有办法利用纯手工的方式,先来解决一些基本的问题,那这样也更有助於我们去理解这些机器学习/深度学习的运作(当然重点是你会更加理解 Framework 有多好用...)
  • 所以我们今天就直接先来看看如何利用 Python 达到 Gradient 的计算吧

Gradient 计算需要先知道什麽?

  • 我们回顾一下之前提到过的 Gradient 概念,Gradient 其实就是偏微分的值组成的 vector
  • 还记得 loss function 是什麽吗?它是用来判断现在选择的这个 function 有多差
  • 那偏微分是对什麽做偏微分,就是利用我们的 Loss function 对变化参数(w, b, ...)去做偏微分,因此在计算 Gradient 之前,我们必须先知道我们的 Loss function 是什麽
  • 那这边我们假设我们的 Loss function 是 mean square error(均方误差),这边已经不在赘述新的数学了,不了解的可以自己去查查看,那 MSE 的数学式子长怎样? https://chart.googleapis.com/chart?cht=tx&chl=%24%24MSE%20%3D%20%7B1%20%5Cover%20n%7D%20%5Csum(%5Chat%20y%20-%20y)%5E2%24%24 计算方法是求预测值( https://chart.googleapis.com/chart?cht=tx&chl=%24%5Chat%20y%24 )与真实值( https://chart.googleapis.com/chart?cht=tx&chl=%24y%24 )之间距离的平方和
  • 写成程序可以怎麽写
    def loss(y, y_predicted):
    
        return ((y_predicted-y) ** 2).mean()
    
  • 那我们还需要知道总共有哪些变数,因此我们假设今天我们是在算 Regression,function 就是 https://chart.googleapis.com/chart?cht=tx&chl=%24f%20%3D%20w%20*%20x%24 ,变数就是一个 w
  • 所以 MSE 也会写成 https://chart.googleapis.com/chart?cht=tx&chl=%24%24MSE%20%3D%20%7B1%20%5Cover%20n%7D%20%5Csum(w%20*%20x%20-%20y)%20%5E%202%24%24

Gradient 怎麽算

  • 所以我们现在的目标是 https://chart.googleapis.com/chart?cht=tx&chl=%5Cpartial%20L%20%5Cover%20%5Cpartial%20w ,那我们的 loss function 是 https://chart.googleapis.com/chart?cht=tx&chl=%24(w%20*%20x%20-%20y)%20%5E%202%24,所以偏微分之後会变成 https://chart.googleapis.com/chart?cht=tx&chl=%242x%20(w%20*%20x%20-%20y)%24
  • 写成程序就会变成(人工微分 OWO)
    def gradient(x, y, y_predicted):
    
        return np.dot(2*x, y_predicted - y).mean()
    

每日小结

  • Python 的 Gradient 计算其实就是针对变数,loss function 等等,去先计算偏微分之後,带入运算
  • 现在光一点点参数就感觉有点复杂,因此我们可以预期,如果参数变多,计算将会变更麻烦,所以我们之後再来看看如果是 PyTorch Framework 会变成怎样呢?
  • 那明天让我们来看看如何利用现在这边的概念,实作简单 Regression

<<:  【第五天 - Fluter BottomNavigationBar(下)行为分析】

>>:  自动化测试,让你上班拥有一杯咖啡的时间 | Day 5 - 执行自动化测试脚本

Web应用扫描工具-Arachni小蜘蛛(上)

arachni是以ruby语言编写 针对web应用的安全漏洞扫描工具 利用各个模组载入进行测试 使用...

【Day3】不可貌相的JS变数型别:基本型别

俗话说:「人不可貌相,海水不可斗量。」就像我们看到郭靖傻不楞登,怎麽知道他武功高强。杨康外表英俊,...

为了转生而点技能-JavaScript,day20(简易Setter、Getter设定

Setter:存值。 **方法一:**set 属性名称(参数){} var wallet = { t...

Day26-保护鲸鱼人人有责(一)

前言 自从进入大容器时代後,Docker、K8s 已经逐渐成为开发、测试及部署时不可或缺的工具,但也...

明年见

居然来到最後一天 真的很感谢有人关注 我想再给我一个月的时间 我就可以把内文补好 因为材料都已经备好...