**last update: 2022-05-26 10:23:11**
[TOC]
### 前言
機器學習是 統計學 與 軟件工程 相結合的科學研究。
----
### 環境準備
**anaconda**
```shell
$ conda env list
$ conda remove -n myenv --all
$ conda activate myenv
```
----
**安裝 Jupyter Notebook 中文語言:**
```shell
$ pip install jupyterlab-language-pack-zh-CN -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
```
重啟后就可以設置 中文了。
----
### LaTeX
[數學公式 | LaTeX 知識庫](https://www.latexstudio.net/LearnLaTeX/basic/10.html#%E8%A1%8C%E5%86%85%E6%95%B0%E5%AD%A6%E6%A8%A1%E5%BC%8F%E5%92%8C%E6%95%B0%E5%AD%A6%E7%AC%A6%E5%8F%B7)
[Detexify LaTeX handwritten symbol recognition](https://detexify.kirelabs.org/classify.html) 公式符號
[run tex snippet](https://texlive.net/run) 預覽
----
### 機器學習
[深度學習公開課【梗直哥】- 文集 嗶哩嗶哩專欄](https://www.bilibili.com/read/readlist/rl660109?spm_id_from=333.999.0.0)
[線性回歸 ?|? Machine Learning ?|? Google for Developers](https://developers.google.cn/machine-learning/crash-course/linear-regression?hl=zh-cn)
> 最優算法(如指數函數時 的 梯度下降算法)用于找到最優的權重參數(某個特征維度的權重w),以使得**目標函數**(損失函數)的值盡可能小,從而獲得最優的**預測函數**,即預測精度高的模型。
#### 線性回歸
```[tex]
\small{Loss = \frac{(18-0)^2 + (15-0)^2 + (18-0)^2 + (16-0)^2 + (15-0)^2 + (14-0)^2 + (24-0)^2}{7}}
```
~~~
y = b + (w1 * x1) + ... + (wn * xn)
MSE = ((f(w,b) x - y1)2 + ... + (f(w,b) x - yn)2) / n
~~~
> 每個維度均方差都可以獨立計算,互不影響,只要最終求平均就行了,所以可以使用多核并行計算以提高效率,這就是為什么使用 GPU 并行計算可以加速訓練過程的原因了。
線性回歸問題就是找到在數據集中,最優的一條直線。
最優直線:各點到該直線的距離平均最小時,即 均方誤差 (MSE) 最小。
最優直線問題 就變成了,損失最小問題。
損失最小問題就是 求損失函數最小值問題。
損失函數:平方均差 的指數函數。
求最小損失問題,即 求指數函數的最低點。這個問題是有答案的,因為指數函數存在最低點。
最指數函數最低點問題,即先找到指數函數斜切,從向減小斜切的方向,向下移動,直到不能減小時,就是最低點的位置了。而找到這個最低點的過程成為梯度下降算法。
訓練步驟:
1. 使用當前權重和偏差計算損失。
2. 確定用于減少損失的權重和偏差的移動方向。
3. 在減小損失的方向上輕微移動權重和偏差。
4. 重復第一步,直至損失無法再減少時。
關鍵詞:權重/偏差、線性回歸、最優直線、平方均差、損失函數、指數函數、斜切、最低點、梯度下降算法。
**均方差的好處?**
正負不會抵消;誤差大的會被放大,誤差小的會被縮小。
**如何確定權重和偏差的移動方向?**
能減少損失的移動方向,轉換為數學問題就是,求當前點的斜切率,即導數值、導數(導函數),斜切率越小的方向即是能減少損失的移動方向。

[2.1 線性代數 - 嗶哩嗶哩](https://www.bilibili.com/read/cv21260508/?from=readlist)
----
#### 代價函數
[【線性回歸、代價函數、損失函數】動畫講解_嗶哩嗶哩_bilibili](https://www.bilibili.com/video/BV1RL411T7mT/?spm_id_from=333.999.0.0)






----
https://www.bilibili.com/video/BV1VM41157D8/
https://www.bilibili.com/video/BV1Zm411R7Kh/?spm_id_from=333.999.0.0
[在線函數圖像生成器工具-免費好用的數學函數繪圖圖形計算器](https://hs.luomashu.com/)
[「機器學習」等于「神經網絡」嗎?人工智能基礎概念梳理](https://jibencaozuo.com/zh-Hans/dataBank/1)
[一個人工智能的誕生](https://www.youtube.com/watch?v=4xwUgYXT1R0&list=PLvQGKXuH8DcKN-mYgfSmo94fdl9T6KZLe)

[2. 機器學習綜述及示例 — 動手實戰人工智能 AI By Doing](https://aibydoing.com/notebooks/chapter01-01-lab-machine-learning-overview-and-examples)
[十五分鐘簡介人工智能,以聽懂為目的 - 掘金](https://juejin.cn/post/7158818147846324254)
[1. 前言 — 《動手學深度學習》 0.1.0 documentation](https://d2l-zh.djl.ai/chapter_introduction/index.html)
> 總而言之,我們沒有編寫喚醒詞識別器,而是編寫了一個“學習”程序。 如果我們用一個巨大的帶標簽的數據集,它很可能可以“學習”識別喚醒詞。 你可以將這種”通過用數據集來確定程序行為”的方法看作是“用數據編程”(programming with data)。 比如,我們可以通過向機器學習系統提供許多貓和狗的圖片來設計一個“貓圖檢測器”。 通過這種方式,檢測器最終可以學會:如果輸入是貓的圖片就輸出一個非常大的正數,如果輸入是狗的圖片就會得出一個非常大的負數。 如果檢測器不確定,它會輸出接近于零的數…… 這個例子僅僅是機器學習常見應用的冰山一角。 而深度學習是機器學習的一個主要分支,我們稍后將對其進行更詳細的解析。
[聊聊圖像識別的小原理,動手實現自己的圖像分類 - 掘金](https://juejin.cn/post/7254458065311334458)
https://juejin.cn/column/7234887157000159290
[一文講通OCR文字識別原理與技術全流程 - 掘金](https://juejin.cn/post/7147218078923751455)
> php 程序員能學會 AI 嗎,總感覺 這個就像是黑盒魔法,哪怕是 識別 0 和 1 ,我們用 代碼寫可能能硬寫出來(判斷 像素是不是直的),但是 其它數字要識別 完全不可能啊,更何況每個人寫的不一樣。用常規命令式編程的思維根本無法理解,無法實現。這是 傳統程序眼 與 AI 最大的鴻溝。傳統的程序邏輯是固定的,寫了什么功能才有什么功能,每一步都是確定,而 AI 好像不是這么回事。
[【官方雙語】深度學習之神經網絡的結構 Part 1 ver 2.0_嗶哩嗶哩_bilibili](https://www.bilibili.com/video/BV1bx411M7Zx/?spm_id_from=333.999.0.0&vd_source=8fc0f668e63ab312d59a3089f3ca7a81)
[【官方雙語】深度學習之梯度下降法 Part 2 ver 0.9 beta_嗶哩嗶哩_bilibili](https://www.bilibili.com/video/BV1Ux411j7ri/?spm_id_from=trigger_reload&vd_source=8fc0f668e63ab312d59a3089f3ca7a81)
[2019年新書推薦-《神經網絡與深度學習》-Michael Nielsen - 知乎](https://zhuanlan.zhihu.com/p/58973417)
[Michael Nielsen](https://michaelnielsen.org/)
[機器學習和深度學習中的學習到底是什么?小白能看懂的AI科普_嗶哩嗶哩_bilibili](https://www.bilibili.com/video/BV1tP4y1y7KW/?spm_id_from=333.999.0.0&vd_source=8fc0f668e63ab312d59a3089f3ca7a81)
[TensorFlow.js | TensorFlow中文官網](https://tensorflow.google.cn/js/?hl=zh-cn)
----
### 如何識別手寫數字?
[神經網絡和深度學習](http://neuralnetworksanddeeplearning.com/)
```python
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
# 定義 MLP 網絡
class MLP(nn.Module):
def __init__(self, input_size, hidden_size, num_classes):
super(MLP, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_size, hidden_size)
self.fc3 = nn.Linear(hidden_size, num_classes)
def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
out = self.relu(out)
out = self.fc3(out)
return out
# 定義超參數
input_size = 28 * 28 # 輸入大小
hidden_size = 512 # 隱藏層大小
num_classes = 10 # 輸出大小(類別數)
batch_size = 100 # 批大小
learning_rate = 0.001 # 學習率
num_epochs = 10 # 訓練輪數
# 加載 MNIST 數據集
train_dataset = datasets.MNIST(root='../data/mnist', train=True, transform=transforms.ToTensor(), download=True)
test_dataset = datasets.MNIST(root='../data/mnist', train=False, transform=transforms.ToTensor(), download=True)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)
# 實例化 MLP 網絡
model = MLP(input_size, hidden_size, num_classes)
# 現在我們已經定義了 MLP 網絡并加載了 MNIST 數據集,接下來使用 PyTorch 的自動求導功能和優化器進行訓練。
# 首先,定義損失函數和優化器;然后迭代訓練數據并使用優化器更新網絡參數。
# 定義損失函數和優化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)
# 訓練網絡
for epoch in range(num_epochs):
for i, (images, labels) in enumerate(train_loader):
images = images.reshape(-1, 28 * 28)
outputs = model(images)
loss = criterion(outputs, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if (i + 1) % 100 == 0:
print(f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{len(train_loader)}], Loss: {loss.item():.4f}')
# 測試網絡
with torch.no_grad():
correct = 0
total = 0
for images, labels in test_loader:
images = images.reshape(-1, 28 * 28)
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f'Accuracy of the network on the 10000 test images: {100 * correct / total} %')
# Accuracy of the network on the 10000 test images: 97.88 %
```
- 開始
- 公益
- 更好的使用看云
- 推薦書單
- 優秀資源整理
- 技術文章寫作規范
- SublimeText - 編碼利器
- PSR-0/PSR-4命名標準
- php的多進程實驗分析
- 高級PHP
- 進程
- 信號
- 事件
- IO模型
- 同步、異步
- socket
- Swoole
- PHP擴展
- Composer
- easyswoole
- php多線程
- 守護程序
- 文件鎖
- s-socket
- aphp
- 隊列&并發
- 隊列
- 講個故事
- 如何最大效率的問題
- 訪問式的web服務(一)
- 訪問式的web服務(二)
- 請求
- 瀏覽器訪問阻塞問題
- Swoole
- 你必須理解的計算機核心概念 - 碼農翻身
- CPU阿甘 - 碼農翻身
- 異步通知,那我要怎么通知你啊?
- 實時操作系統
- 深入實時 Linux
- Redis 實現隊列
- redis與隊列
- 定時-時鐘-阻塞
- 計算機的生命
- 多進程/多線程
- 進程通信
- 拜占庭將軍問題深入探討
- JAVA CAS原理深度分析
- 隊列的思考
- 走進并發的世界
- 鎖
- 事務筆記
- 并發問題帶來的后果
- 為什么說樂觀鎖是安全的
- 內存鎖與內存事務 - 劉小兵2014
- 加鎖還是不加鎖,這是一個問題 - 碼農翻身
- 編程世界的那把鎖 - 碼農翻身
- 如何保證萬無一失
- 傳統事務與柔性事務
- 大白話搞懂什么是同步/異步/阻塞/非阻塞
- redis實現鎖
- 淺談mysql事務
- PHP異常
- php錯誤
- 文件加載
- 路由與偽靜態
- URL模式之分析
- 字符串處理
- 正則表達式
- 數組合并與+
- 文件上傳
- 常用驗證與過濾
- 記錄
- 趣圖
- foreach需要注意的問題
- Discuz!筆記
- 程序設計思維
- 抽象與具體
- 配置
- 關于如何學習的思考
- 編程思維
- 談編程
- 如何安全的修改對象
- 臨時
- 臨時筆記
- 透過問題看本質
- 程序后門
- 邊界檢查
- session
- 安全
- 王垠
- 第三方數據接口
- 驗證碼問題
- 還是少不了虛擬機
- 程序員如何談戀愛
- 程序員為什么要一直改BUG,為什么不能一次性把代碼寫好?
- 碎碎念
- 算法
- 實用代碼
- 相對私密與絕對私密
- 學習目標
- 隨記
- 編程小知識
- foo
- 落盤
- URL編碼的思考
- 字符編碼
- Elasticsearch
- TCP-IP協議
- 碎碎念2
- Grafana
- EFK、ELK
- RPC
- 依賴注入
- 科目一
- 開發筆記
- 經緯度格式轉換
- php時區問題
- 解決本地開發時調用遠程AIP跨域問題
- 后期靜態綁定
- 談tp的跳轉提示頁面
- 無限分類問題
- 生成微縮圖
- MVC名詞
- MVC架構
- 也許模塊不是唯一的答案
- 哈希算法
- 開發后臺
- 軟件設計架構
- mysql表字段設計
- 上傳表如何設計
- 二開心得
- awesomes-tables
- 安全的代碼部署
- 微信開發筆記
- 賬戶授權相關
- 小程序獲取是否關注其公眾號
- 支付相關
- 提交訂單
- 微信支付筆記
- 支付接口筆記
- 支付中心開發
- 下單與支付
- 支付流程設計
- 訂單與支付設計
- 敏感操作驗證
- 排序設計
- 代碼的運行環境
- 搜索關鍵字的顯示處理
- 接口異步更新ip信息
- 圖片處理
- 項目搭建
- 閱讀文檔的新方式
- mysql_insert_id并發問題思考
- 行鎖注意事項
- 細節注意
- 如何處理用戶的輸入
- 不可見的字符
- 抽獎
- 時間處理
- 應用開發實戰
- python 學習記錄
- Scrapy 教程
- Playwright 教程
- stealth.min.js
- Selenium 教程
- requests 教程
- pyautogui 教程
- Flask 教程
- PyInstaller 教程
- 蜘蛛
- python 文檔相似度驗證
- thinkphp5.0數據庫與模型的研究
- workerman進程管理
- workerman網絡分析
- java學習記錄
- docker
- 筆記
- kubernetes
- Kubernetes
- PaddlePaddle
- composer
- oneinstack
- 人工智能 AI
- 京東
- pc_detailpage_wareBusiness
- doc
- 電商網站設計
- iwebshop
- 商品規格分析
- 商品屬性分析
- tpshop
- 商品規格分析
- 商品屬性分析
- 電商表設計
- 設計記錄
- 優惠券
- 生成唯一訂單號
- 購物車技術
- 分類與類型
- 微信登錄與綁定
- 京東到家庫存系統架構設計
- crmeb
- 命名規范
- Nginx https配置
- 關于人工智能
- 從人的思考方式到二叉樹
- 架構
- 今日有感
- 文章保存
- 安全背后: 瀏覽器是如何校驗證書的
- 避不開的分布式事務
- devops自動化運維、部署、測試的最后一公里 —— ApiFox 云時代的接口管理工具
- 找到自己今生要做的事
- 自動化生活
- 開源與漿果
- Apifox: API 接口自動化測試指南