---
# System prepended metadata

title: 10 | Machine Learning’s New Math
tags: [' uncomplete', IEEE]

---

---
title: 10 | Machine Learning’s New Math
tags: IEEE, uncomplete 
---
# Title
[**原文章**](https://spectrum.ieee.org/topic/artificial-intelligence/)
原文時間：2022.10.18
本篇撰寫日期：2022.10.24
By：蘇雋勛
# 大綱

近期 AI 有著驚人的發展，但伴隨的代價也逐漸提升，也就是大量的計算步驟

為了提高各方面的效率，研究者們從最根本的地方著手，也就是表達數字的方式

# Nvidia’s per-vector scaling scheme

Nvidia 藉由 VSQ 技術(per-vector scaled quantization)，在準確度不會有明顯損失下，使數字的大小可以降低，像是從 16 bits降到 8 bit

>Nvidia 的 A100 就是 32 bits 混合 16 bit
>而他們要新推出的 Hopper 則到達了 8 bits浮點數
>他們還有一個正在開發的原型，由 8 bits混合 4 bit

## VSQ

1 個 4 bits 可以表達 16 種數字，所以一個數字以 4 bits 表達時，會被捨去一些位數以對應到這 16 個數字中的其中一個。這種精確度損失叫做 quantization error 量化誤差

>應該是在說 4 bits int

不過，你可以讓這 16 個數字配上一個係數將他們在數線上彼此間拉得更近，或是離得更遠
使這 16 個數字可以去對應到實際在神經網路中使用的數字範圍

![](https://drive.google.com/uc?id=1a2tDquVDvotIC1rVrsr-xjuzQ-2MhA0W&export=download)

當從 8 bits 降成以 4 bits 表示時，能源效率上升兩倍

目前這個方法只能用在 inferencing 這個過程中，而他們團隊希望可以延伸到整個訓練過程

:::info
在我回顧一下他們的研究後，這篇應該都是在講 Floating Point / FP，也就是說沒特別講 FP 的部分都是 FP
不過 VSQ 看起來應該是利用 INT 去量化 FP
:::

# Posits, a new kind of number

:::success
這篇我之前有寫過，可以[回顧](https://hackmd.io/U8jpUon6QR6B0YEMYbnjrw)
:::

# Taking the risk out of RISC-V’s math

    Computer scientists in Switzerland and Italy

這是用於開源的 RISC-V 架構

他們混合了高跟低精確度的數字，解決了 overflow、underflow 和 swamping

:::danger
把數字的精確度降低時，兩個低精確度數字相乘的結果可能會
- overflow：數字太大以致原先的數字長度無法準確表示
- underflow：數字太小以致原先的數字長度無法準確表示

如果一個大的低精確度數字，加上一個小的低精確度數字，可能會
- swamping：小的低精確度數字可能會不見
:::

混合用的另一個好處是，可以低精確度作為輸入，高精確度作為輸出；並將這個輸出用作下一個運算的輸入，直到整個運算結束，以確保精確度不會喪失

受惠的有 AI 的矩陣運算 dot product，由 fused multiply-add units (FMAs)來執行

FMA 會執行這樣的一個運算

$$
d = a*b + c
$$
其中 a 跟 b 是低精確度的，例如 8 bits
而 c ，可能來自別的運算結果，和輸出 d ，是高精確度的，像是 16 bits


而且他們的團隊有個未來展望，就是 FMA 不要只做一次運算就 Round UP，應該平行兩個 FMA 的運算結果相加後再 Round UP；如此除了可以提高精確度，還可以有效的使用記憶體，因為這樣就不會使用額外的記憶體拿來儲存前一次的運算結果，只為了等下一次的運算結果出來。

# BF16 is all you need

    Engineers at the Barcelona Supercomputing Center and Intel 

將 FP 32 的 23 個 mantissa 砍掉 16 個，使 FP 32 可以有動態的空間，並將他叫做 BF 16

而他們還可以組合多個 BF 16，叫做 BF 16-N，用這個來表達一個數字，這樣在運算時就不會喪失精確度