深度学习中的实用数学

写在前面:本篇读书笔记属于《深度学习原理与Pytorch实战》张伟振,清华大学出版社, 属于本书第三章节。笔者邮箱:pinecypressfxd@outlook.com欢迎学习讨论。



深度学习需要一些必要的数学知识。以下介绍原理的同时使用代码展示。

深度学习中的实用数学

线性代数

向量

n个数组成的有序数组,称为维度为n的向量。

内积可以衡量两个向量之间的相似程度

import numpy as np
v1 = [1,2,3,4,5]
v2 = [1,2,3,4,5]
# 内积
v3 = np.array(v1)*np.array(v2)
v3
array([ 1,  4,  9, 16, 25])

矩阵

由m*n个数排成的m行n列的数表成为m行n列的矩阵。简称m*n。

matrix = [[0,1,2],
 [3,4,5],
 [6,7,8]]

矩阵乘法:C=AB,A的行向量与B的列向量的内积。

高等数学

函数

函数的极限

def limit(fx, x0, delta = 0.0001, sigma = 0.01):
  right_limit = fx(x0 + delta)
  left_limit = fx(x0 - delta)
  # 若左极限等于右极限,则极限存在?
  if abs(right_limit - left_limit)<sigma:
    return right_limit

def f(x):
  return x**x

print(limit(f,2))
4.000677326211935
import math
def f2(x):
  return math.log(math.cos(x-1))/(1-math.sin(math.pi * x / 2))
print(limit(f2 , 1))
-0.40528473223537537

导数

导数是一个极限。瞬时变化率。

def derivative(fx, x0, delta_x=0.00001, allow_miss = 0.01):
  right_derivative = (fx(x0 + delta_x) - fx(x0))/(delta_x)
  left_derivative = (fx(x0 - delta_x) - fx(x0))/(-delta_x)
  if abs(right_derivative - left_derivative)<allow_miss:
    return right_derivative

def f(x):
  return x*x + 2*x +1

print(derivative(f,5))
12.000009999724169

导函数

泰勒公式

f ( x ) ≃ ∑ i = 0 n f ( n ) ( x 0 ) n ! ( x − x 0 ) n f(x) ≃ \sum_{i=0}^n \frac{f^{(n)}(x_0)}{n!}(x-x_0)^{n} f(x)i=0nn!f(n)(x0)(xx0)n

#   求e^x
import math
def exp(x, allow_miss = 0.0001):
  result = 1 + x
  n = 2
  while(x**n)/math.factorial(n)>allow_miss:
    result += x**n/math.factorial(n)
    n+=1
  return result
  math.factorial
print(exp(1))
2.7182539682539684

偏导数

在一个神经网络中有大量的参数,我们需要用到偏导数的概念
∂ f ( x 1 , x 2 , . . . , x n ) ∂ x i \frac{∂f(x_1,x_2,...,x_n)}{∂x_i} xif(x1,x2,...,xn),衡量点x处只有 x i x_i xi变化时 f ( x ) f(x) f(x)如何变化。

def partial_derivative(fx, x:list, delta_xi = 0.00001, allow_miss = 0.01):
  result = []
  for i,e in enumerate(x):
    x_ = x.copy()
    x_[i] = e + delta_xi
    right_derivative = (fx(x_) - fx(x))/(delta_xi)
    x_[i] = e - delta_xi
    left_derivative = (fx(x_) - fx(x))/(-delta_xi)
    if abs(right_derivative - left_derivative)<allow_miss:
      result.append(right_derivative)
  return result

# 测试代码使用sum,所有xi的偏导数均为1.
def f(x: list):
  sum = 0
  for e in x:
    sum += e
  return sum

print(partial_derivative(f,[1,2,3,4,5]))

[0.9999999999621422, 0.9999999999621422, 0.9999999999621422, 0.9999999999621422, 0.9999999999621422]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值