2024年12月18日 星期三

 

生成深度學習|訓練機器繪畫、寫作、作曲與玩遊戲 第二版
Generative Deep Learning, 2nd Edition

Page  203 

  X_T should have zero mean and unit variance 
 
中文應為: 均值為 0 且單位變異數 I 

  unit variance  (If all variables are independent, Σ = I (identity matrix))

I = Σ = [1 0 0 ...
             0 1 0 ...
             0 0 1 ...
              . .. ... ...]







2024年12月16日 星期一

判別式AI與生成式AI

 

生成式AI的崛起與發展

生成式AI(Generative AI)在2022年底隨著ChatGPT的問世而廣受關注。ChatGPT展現出近乎自然的人類對話能力,讓許多人驚嘆AI技術的進展。如今,ChatGPT的功能已不僅限於文字對話,更可解讀圖片、PDF文件分析,並能提供內容摘要與深度分析。市場上類似的工具還包括Microsoft Copilot、Claude和Notebook LLM等。除了文字生成,AI技術也延伸至音樂創作和圖像生成領域。 在圖像生成領域已有非常成熟的平台,例如 Stable Diffusion、Midjourney和DALL-E等。

判別式AI與生成式AI的本質差異

相較於2019年主流的判別式AI(Discriminative AI)——專注於圖像分類或文本分類等任務,生成式AI面對的是更具挑戰性的問題。判別式AI主要解決P(y=k|x)的問題,即在已知條件x下,預測標籤y為k的機率,而無需了解x的整體分布。

生成式AI則致力於估計P(x),即從觀察到的樣本x1, x2, x3...中推測整體的機率分布。這個任務的複雜度遠超過判別式AI。理解P(x)分布的重要性在於:如果我們能找到一個近似分布Q(x),使其接近真實分布P(x),那麼從Q(x)中採樣得到的新樣本x將與真實數據具有相似的特徵。

舉例來說,在人臉生成的應用中,即使生成的面孔並不存在於原始訓練數據集中,但由於其符合真實人臉的分布特徵,因此看起來自然且真實,難以與真實人臉區分。這正是生成式AI的強大之處。


生成式AI的技術發展史

  • Shift from GANs to Diffusion Models for image generation
  • Evolution from autoregressive models to large language models

  • 2022: Stable Diffusion released as open-source

    2023

    • GPT-4 released with multimodal capabilities
    • Claude (Anthropic) and Google's PaLM demonstrate advanced reasoning
    • Improved versions of Stable Diffusion (XL, 3)
    • Llama and Llama 2 released by Meta
    • Gemini announced by Google












    2024年10月8日 星期二

    描述常態分佈的特徵: 偏度與峰度




    對於常態分佈(可以Histogram 畫下來) ,除了mu (mean), sigma (variance), 還可以用 Skwness 及kurtosis 來描述, 此亦可以作為特徵。

    Skwness: 描述圖形是對稱分佈嗎? 還是左偏分佈 ? 或右偏分佈分佈? 



    偏度 k3k_3 的計算公式:

    Skewness=E[(Xμ)3]σ3\text{Skewness} = \frac{\mathbb{E}[(X - \mu)^3]}{\sigma^3}
    • 如果 k3>  0,分佈為正偏(右偏),資料分佈中有較多的數據點集中在低值區域,而右尾較長,代表有少數較大的數值偏離平均數使得 (X-u)的3次方後正更多.
    • 如果 k3 < 0,分佈為負偏(左偏),資料分佈中有較多的數據點集中在高值區域,而左尾較長,代表有少數較小的數值偏離平均數使得 (X-u)的3次方後負更多.



    峰度(Kurtosis)決定數值分布的同質性與異質性,越接近高狹峰表示越同質,越趨向低闊峰表示越異質。



    峰度 (Kurtosis) 的計算公式是:

    Kurtosis

    =1ni=1n(Xiμσ)4\text{Kurtosis} = \frac{1}{n} \sum_{i=1}^{n} \left(\frac{X_i - \mu}{\sigma}\right)^4


     標準常態分佈的峰度為 3.  為使標準常態分佈的峰度為 0,故會將原始峰度減去 3,從而更方便地比較其他分佈的峰度。也因此為峰度會有負值的原因。











     












    數據分佈的尾部厚度愈厚,表示有較多異常值(離峰較遠者),故按公式計算其峰值會較大。

    2024年10月5日 星期六

    多變量常態分佈 Normal Distribution

    Multinormal Distribution (多態性常態分佈)


    當K=1 時, 即是單維的常態分佈 f(x)


    若 u=0, covariane matrix= I  
    當K=2 時, 為雙變數的常態分佈 PDF f(x,y)










    2024年9月25日 星期三

    觀察資料的趨勢



    EDA 中觀察資料的趨勢

    針對Time Series Data 通常會觀察原始資料的趨勢(Trend), 季節性/週期性(Seasonality)的狀態或資料中的雜訊.



    但這些數據是怎麼取得的呢? 
    1. 趨勢線: 用原始資料的移動平均值(MA)作為長期走勢的觀察. (移動窗口可以自己設定) 
    2. 週期性 (Seaonality): 將原始資料減去趨勢線可以強調週期性的特徵
    3. 雜訊(Residual) :   原始資料減去趨勢線再減去週期性線, 剩下的值認定是噪訊(隨機波動)或短期的變化。

    可以自己用Python 完成或者利用 statsmodels 工具來完成。 statsmodels 本身提供許多不同統計模型和統計資料探索的函數。


    另外, 也可以計算ACF ( Autocorrelation)  , 自相關係數為原始資料 Xt 和 X的lagged  Xt+k計算相關係數,ACF 大小可以幫助我們了解數據中週期性的狀態。當lagged 越大 (即K愈大),ACF 通常會逐漸減少,特別是對於沒有長期相關性的數據而言。


    $$\rho_k = \frac{\sum_{t=k+1}^{n} (X_t - \bar{X})(X_{t-k} - \bar{X})}{\sum_{t=1}^{n} (X_t - \bar{X})^2}$$

    Note:$ \rho_0=1 $ 

    繪製出ACF圖, 若每隔 $i$ 之後都能看到這個峰值, 則可能存週期 $i$。序列資料可能有存在一個以上的週期,如每週會有一個週期, 而每季也有一個週期。 






    ACF圖( X軸為不同的lag k, Y軸為ACF值)

    底下ACF圖說明序列資料沒有存在週期性.


    --------------

    具有週期性的資料
     seasonal_pattern = 10 * np.sin(2 * np.pi * time / 12
     trend = 0.1 * time 
     noise = np.random.normal(0, 1, size=100
     data = seasonal_pattern + trend + noise






    ACF圖( X軸為不同的lag k, Y軸為ACF值)

    底下ACF圖說明序列資料存在一個週期性, 在Lag n*K 處都有差不多的峰值, 表示其週期性為 k


    2024年9月21日 星期六

    what is Botnet ?

     

    A botnet is a network of compromised computers or devices, often referred to as "bots" or "zombies," that are controlled remotely by a malicious actor (known as a "botmaster"). These devices are typically infected with malware, allowing the botmaster to execute various commands on them without the device owner’s knowledge.

    Here are some common uses and dangers of botnets:

    1. Distributed Denial of Service (DDoS) Attacks: Botnets are often used to flood a target server or website with traffic, overwhelming it and causing it to crash or become unavailable to users.

    2. Spam Distribution: They can be used to send out massive amounts of spam emails or phishing messages, which can lead to further infections or fraud.

    3. Credential Stuffing: Botnets may attempt to use stolen usernames and passwords on different sites, automating the process to try many combinations quickly.



    2024年9月18日 星期三

    最大概似估計 (MLE) 與 GLL

     




    看到 y1 情況下 , 機率分佈其參數會是 $ \theta_1 $ 的可能性高於$ \theta_2 $.

    可能性的意義亦等同於  $ P( y_1 \mid \theta_1 ) > P( y_1 \mid \theta_2 ) $ , 

    但如何找到最好的$ \theta $ 使其可能性達到最大,即機率 $ P( y_1 \mid \theta )$ 能達到最大, 此即為 最大概似估計 (Maximum Likelihood Estimation) 的目標。

    若此機率模型為高斯分佈, 即什麼樣的參數 $(\mu, \sigma^2)$ , 能使 $ P(y_1 \mid \mu, \sigma^2)$ 最大.

    若你的機器學習模型是預測一個高斯分佈的參數  $(\mu, \sigma^2)$

    $$X \sim \mathcal{N}(\mu, \sigma^2)$$

    $$f(x) = \frac{1}{\sigma \sqrt{2\pi}} e^{ - \frac{(x - \mu)^2}{2 \sigma^2} }$$

    則你可以將對應答案 $y_1$ 丟入得出其機率,即 $$ f ( y_1 \mid \mu, \sigma^2) $$

    若預測的參數夠好的話,則$f(y_1\mid \mu, \sigma^2)$ 應該要很大,若取Log 改以$$X \sim \text{Log-N}(\mu, \sigma^2)$$ 表示,值也會是大的。

    $$log(f(y_1\mid \mu, \sigma^2)) = -\frac{1}{2} \log(2\pi) -\frac{1}{2}  \log(\sigma^2) - \frac{(y_1 - \mu)^2}{2 \sigma^2}$$


    此式子的最大值為 y1=μ .  y1=μ 代表我們猜得夠準才能使機率值最大 










     若預測多組 $(\mu_1, \sigma_1^2), (\mu_2, \sigma_2^2),...,(\mu_n, \sigma_n^2)$

    效能可以直接加總 $$f(y_1\mid \mu_1, \sigma_1^2) +f(y_2\mid \mu_2, \sigma_2^2)+...+f(y_n\mid \mu_n, \sigma_n^n)$$  , 或取log 值相加也可以。

     $log(f(y_1\mid \mu_1, \sigma_1^2)) +log(f(y_2\mid \mu_2, \sigma_2^2))+...+log(f(y_n\mid \mu_n, \sigma_n^n))$   ---> 這就是 GLL (Gaussian Log Likelihood)

    a^2))$$






    如何同時衡量模型的正確性與長期穩定性?

     

    如何同時衡量模型的正確性與長期穩定性?

    Home Credit - Credit Risk Model Stability

    Create a model measured against feature stability over time

    https://www.kaggle.com/competitions/home-credit-credit-risk-model-stability/overview


    gini = 2 * AUC - 1   (AUC:0~1)

    stability metric = mean(gini) + 88.0 * min(0, a) - 0.5 * std(residuals)

    針對預測能力呈現下滑趨勢給予懲罰 :即 a < 0 的情況

    穏定性評估: 計算 residuals 的標準差, 愈小表示模型愈穏定. 最好是 0



    [References ]


    Understanding ROC and AUC 

    2024年8月3日 星期六

    iPAS 機器學習工程師參考樣題解說




    更多補充說明 :

    1.) 神經網路加入Embedding 層的用意? 
    將輸入的 sparse vector 轉換成高維度的 dense vector,如此的 dense vector可能可以表現資料更多元的特徵。

    2.) 模型效能評估為何使用RMSLE (Root Mean Square Logarithmic Error)  而不是MSE  ? 

    因為當資料數據 y 本身差異很大時, 決定MSE 的大小其實都是由數值很大的 y 所主導, 對於數值很小的 y 就顯得微不足道。  故若想要觀察每一筆資料預測的誤差不要被某一筆數量級較大的y所主導,可以使用RMSLE.


    因為RMSLE 先取 log  再計算MSE.。 由於取log 會使數值 scale 變小, 因此即使存在某些 y 很大, 對MSE 的影響也會相對變小。

    另外,也可以用MAPE, 尤其當每筆資料數據 y 都是很大的情況,用MSE 計算都將超大,故用平均絕對百分比誤差反而是一個比較能看出預測和標準答案的誤差率。

     



    Read More: 

    2024年5月29日 星期三

    [ARM bootloader] 問題解說

     1. 組合語言和指令集是一樣的東西嗎? 網路上看到的一般在說x86或ARM的assembly好像就是在說指令集,但圖Assembly和Instruction set又是分開的,所以還是有差別?


    關係像是這樣

    Assembly Language -------------------Assembler----------> CPU Instruction set  







    2. 講義.text section裡的有一行rodata.str1.4是什麼意思?

       .rodata.xxxx  區段也是 read only data, 但存的是程式中的常數 "字串" 
    2.JPG


    3. LMA load memory address我不太懂什麼時候會用到,應該是說不太知道10-118頁的ROM和RAM各是什麼角色,一般所謂的「load進memory」的memory都是指RAM嗎?

    (1)ROM 存放程式的地方, RAM 執行程式的地方
    但ROM這個硬體是CPU可以隨機定址的, 所以其實程式也可以在ROM上跑, 只要將程式中的變數copy 到RAM即可,但要將. text, .rodata 等也都copy到RAM也是可以的. 

    (2)若VMA==LMA 則不用copy , 但VMA和LMA不同, 則要將 LMA (來源) copy 到 VMA(目的地)  
    底下圖 就是VMA和LMA不同, 所以會有copy的動作
    .
    (3) load進memory==> memory是指RAM 




    4. Linker startup code, boot.o負責copy和BSS清成0是否口誤,因為下一頁boot.o只有負責copy,start.o才是zero BSS,兩個是分開的

    對, boot.o 的程式只負責copy而已




    2024年4月16日 星期二

    [Linux Driver] 掛載AT24 EEPROM Driver

    (一) 使用sysfs 的方式操作EEPROM

    Load at24 driver (eeprom) 要配合 device tree 的操作.

      step 1: 
       
       # compile dts to dtbo
        >>    dtc -@ -I dts -O dtb -o at24.dtbo at24.dts
            
       # copy to /boot/overlays  
        >> sudo cp at24.dtbo  /boot/overlays 


       # modify /boot/config.txt and add this line 

       dtoverlay=at24

      # reboot pi  

        >> sudo reboot

      
    step 2: sudo modprobe at24 (載入Kernel 原生 Driver )





    step3:  正常情況下會產生   /sys/bus/i2c/devices/1-0050/eeprom
                       你可以讀寫此eeprom檔案, 例如:

             sudo dd if=123.bmp of=/sys/bus/i2c/devices/1-0050/eeprom
             sudo dd of=~/dump.bin  if=/sys/bus/i2c/devices/1-0050/eeprom



    =====================================================

    (二) 使用字元裝置的方式操作EEPROM

    掛載 i2c-dev 模組後, 會生成 /dev/i2c-1 檔案, 可利用i2c tools 工具進行讀寫









    ---------

    at24.dts

    // Definitions for I2C EEPROM (24lcxx)
    // www.ittraining.com.tw
    /dts-v1/;
    /plugin/;

    / {
            compatible = "brcm,bcm2708";

            fragment@0 {
                    target = <&i2c1>;
                    __overlay__ {
                            #address-cells = <1>;
                            #size-cells = <0>;
                            status = "okay";
                         
      
    eeprom@50 {
    compatible = "atmel,24c02";
    reg = <0x50>;  // I2C address of the AT24C02
    pagesize = <8>;
    size = <256>;
    };
      
                            
                    };
            };
            
            
    };

    2024年3月25日 星期一

    [Linux Driver] 技術回覆整理

     

    Q0: Driver 開發方式為何?


    Ans: 

    請參考"Linux Driver開發的模式"  https://blog.ittraining.com.tw/2024/02/linux.html

     

    Q1: 在Linux 驅動程式-> Linux GPIO host control 的bcm2708_gpio.c 是在哪個路徑下?


    Ans: 課程使用的是kernel 4.4.x , 其關於bcm2708_gpio.c 改為 driver_gpio.c
    路徑位於 /home/pi/linux-raspberrypi-kernel_1.20190401-1/drivers/bcma



    Q2: 為何在範例"LinuxDriver_Data_20191001 \Code\14-GPIO-RPI_H\gpio.c"裡

    只有定義

    MODULE_LICENSE("GPL");
    MODULE_AUTHOR("ittraining.com.tw");
    MODULE_DESCRIPTION("A Simple GPIO Device Driver module for RaspPi");

    而沒有定義
    module_init();
    module_exit();

    Ans:

    原始module 進入及離開點, 都是固定這個名字,
    int init_module(void)
    void cleanup_module(void)

    若想要換別的名字,可以用以下巨集代換成別的名字.
    module_init(led_init_module);
    module_exit(led_remove_module);

    Q3: 02_BTN_LED 裡的local_irq_save(flags), 禁止的irq是button_irq, 對嗎?

    Ans:  不是. 

    local_irq_save(flags)   //是對本次被中斷的CPU, 禁止它再接受何任何中斷

    /*the critical section of code*/
    .
    local_irq_restore(flags) //還原被中斷前的CPU狀態


    Q4:  Raspberry Pi 開發板接上電源後(I/O板接電腦USB埠, 主板接USB電源), 開機訊息或是下dmesg會常出現以下:

    [ 10.391505] Under-voltage detected! (0x00050005)
    [ 14.561447] Voltage normalised (0x00000000)

    Ans:  其實可以略過此訊息, 但如果要消除此訊息.. 另外購買 2.5A power supply 供電, 不能用PC的 USB供電,因為電腦電流供應不足.

    Q5:   關於中斷控制器

       這個local arm周邊的 具體是甚麼樣的周邊 請舉例
       這些周邊也接到GPU的中段控制器裡嗎? 
       另外, 中斷控制器有沒有在GPU裡?
       bcm2835 GPU ARM內部的IP簡圖去哪查?

    Ans: 


    (1) 來自ARM內部本身的中斷, 主要就是ARM 內部timer和作為和GPU溝通界面(Mailbox)的中斷通知
    (2) 不知道,但也不用管GPU內部的中斷控制器
    (3) 沒有, 我們講的中斷控制器是用來通知ARM 而己
    (4)   Hardware architecture:   GPU ----> Interrupt controller ---> ARM


       資料來源: BCM2835-ARM-Peripherals  Ch7 Interrupts

     

    Q5: 如何自己編譯核心或準備本機開發模式

    請參閱 "Quick guide for building Raspberry Pi kernel 4.4.x"


    Q6:

    暫存器的確有可能因為中斷而改變狀態,但不懂得是明明已經說是存取暫存器
    並不是一般放在記憶體的變數, 根本沒所謂保存在記憶體裡阿




    上面這段描述是不是錯的?  我看gpio dirver也沒有加所以volatile?






    Ans: 

    (1) 現在計算機架構採用Memory-mapped I/O ,  將Peripheral Register  (Special Function Register)也映射在記憶體的一個區段, 所以存取週邊亦等同於存取記憶體.
       
    (2)也許  readl 函式宣告像這樣.  readl (volatile uint32_t* paddr)

    Q6 :電壓準位的問題

      Ans: 



    2024年3月1日 星期五

    艾鍗學院ARM MCU Board - NEW


    艾鍗ARM MCU  實驗套件採用新唐 M482LE8AE (NuMicro® M482 USB OTG 系列)



    MCU:

    • 新唐 M482LE8AE (NuMicro® M482 USB OTG 系列)
    • 高達 192 MHz Arm® Cortex®-M4F 核心
    • 128 KB 快閃記憶體,支援 eXecute-Only-Memory ( XOM )
    • 64 KB RAM,包含 32 KB 硬體奇偶校驗


    電源: USB 輸入電源 5V,500mA 自復型保險絲限流保護,系統穩壓 3.3V


    燒錄除錯器:  DAPLink


    USB:  

    USB 2.0 全速裝置/主機/OTG 控制器及內置 PHY


    GPIO:

    一組 1602 文字型 LCD

    on board 輸入按鍵 x1

    一組步進馬達及控制器模組


    12bits SAR ADC:

    AD 通道 12:10K 熱敏電阻(on board)

    AD 通道 13:100K VR(on board)


    12bits DAC: 1 組 DAC 輸出通道


    16bits PWM:

    PWM1_1:蜂鳴器 Buzzer

    PWM1_2:Capture mode 紅外線收發模組(on board)


    UART:

    CH340G USB 模組 (UART1)

    ESP8266 WiFi 模組 (UART1)


    I2C: BH1750 照度計

    SPI: NRF24L01P 2.4G 無線通訊模組



    M482LE8AE晶片規格資料:

    核心
      - 高達 192 MHz Arm® Cortex®-M4F 核心
      - DSP 指令集
      - 記憶體保護單元
       
    記憶體
      - 128 KB 快閃記憶體,支援 eXecute-Only-Memory ( XOM )
      - 64 KB RAM,包含 32 KB 硬體奇偶校驗
      - 2 KB 一次性燒錄區塊 ( OTP )
       
    循環冗餘校驗 ( CRC ) 單元
       
    16 通道周邊 DMA 控制器
       
    外部匯流排介面
      - LCD 平行介面,i80 模式
       
    時脈源 ( Clocks )
      - 4 到 24 MHz 晶振
      - RTC 用 32 kHz 振盪器
      - 內部 48 MHz RC 振盪器 ( X-less )
      - 內部 12 MHz RC 振盪器
      - 內部 10 kHz RC 振盪器
       
    RTC
      - 獨立 VBAT 電源輸入
      - 20 位元組備份暫存器
       
    計時器和 PWM
      - 4 個 32 位元計時器
      - 12 路增強型 PWM ( 12 個 16 位元計時器 )
      - 12 路基本型 PWM ( 2 個 16 位元計時器 )
      - 1 個 24 位元倒數 SysTick 計時器
      - 1 個看門狗計時器
      - 1 個視窗看門狗計時器
    類比周邊
      - 1 個 12 位元,多達 12 通道 5 MSPS SAR ADC
      - 1 個 12 位元 1 MSPS DAC
      - 2 個滿擺幅 ( Rail-to-rail ) 比較器
       
    通訊介面
      -

    多達 8 個低功耗 UART 介面 ( 17 Mbps ) ,包含 2 個 LIN 介面

      - 1個 ISO-7816 介面 ( 3.4 MHz ) ,支援全雙工 UART 模式
      - 3 個 I²C 介面 ( 可達 3.4 Mbps )
      - 2 個四線 SPI 介面 ( 可達 96 MHz )
      - 多達 2 個 SPI /I²S 介面 ( SPI 可達 96 MHz 、I²S 可達 192 kHz/16-bit )
      - 1 個 I²S 介面 ( 192 kHz/32-bit )
      - 1 個 SD 卡控制器 ( 50 MHz )
       
    控制介面
      - 個正交編解碼介面 ( QEI )
      - 個 24 位元 通道輸入捕捉計數器單元
       
    影像輸入介面
      - CMOS 感測器介面帶有硬體 1 位元亮度輸出
        
    進階連結
      - USB 2.0 全速裝置/主機/OTG 控制器及內置 PHY
       
    操作特性
      - 電壓範圍: 1.8V to 3.6 V
      - 溫度範圍: - 40 ℃ to 105 ℃
         
    符合 IEC-60730 Class B
       
    加解密引擎
      - AES-256
      - 真亂數產生器



    資源連結:
    1. M482LE8AE晶片規格
    2. 艾鍗ARM Cortex M4 板電路圖