星期五。見面

程式 | 學習 | 日記 | 玩樂

    [論文速速讀]系列文章介紹

前言

論文速速讀系列是從今年四月開始,我開始寫一些論文的中文讀書筆記,還記得第一篇是[論文速速讀]ReZero is All You Need: Fast Convergence at Large Depth,之後發現儘管自己已經陸續產出了幾篇文章,可是好像都沒正式的跟大家介紹這系列文章的由來xD

所以這篇文章就是來講講這系列文章到底是什麼,以及我會和會想寫這些文章。

論文速速讀系列是什麼?

由於在AI領域每年總是有一些非常重大的突破和應用,如果跟不上潮流很有可能就會錯失許多機會。例如,對NLP領域熟悉的話你一定聽過2013年的word2vec、2014年開始流行的attention、2018年的Bert…這些很有名的技術。

還記得Bert剛出的時候我好像剛進碩士實驗室,當時只知道這個技術屌打了當時一堆NLP的研究,但我想也想不到兩年後Bert已經造成如此大的影響力,一堆基於Bert的變形應用在各大領域上都取得了非常優異的結果。

因此,我想要藉由這系列的文章讓自己能夠更加快速的了解AI的新技術和研究,同時逼迫自己看論文xD

繼續閱讀

    [課程筆記]課程筆記系列總覽

本文記錄了自己在上課時所記錄的一些課程筆記,可以透過這邊文章連結到所有以往發過的課程筆記文章。

繼續閱讀

[課程筆記]Linux Driver正點原子課程筆記3 - 我的第一個Linux驅動

〖想觀看更多課程筆記,至[課程筆記]課程筆記系列總覽可以看到目前已發布的所有文章!〗

Course 3 - 我的第一個Linux驅動

字符設備驅動框架

上次有說到字符驅動提供給外部的api都被定義在file_operations structs內,這個結構被定義在/include/linux/fs.h下

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/* /include/linux/fs.h */
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
int (*iterate) (struct file *, struct dir_context *);
int (*iterate_shared) (struct file *, struct dir_context *);
__poll_t (*poll) (struct file *, struct poll_table_struct *);
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
unsigned long mmap_supported_flags;
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *, fl_owner_t id);
int (*release) (struct inode *, struct file *);
int (*fsync) (struct file *, loff_t, loff_t, int datasync);
int (*fasync) (int, struct file *, int);
int (*lock) (struct file *, int, struct file_lock *);
ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
int (*check_flags)(int);
int (*flock) (struct file *, int, struct file_lock *);
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
int (*setlease)(struct file *, long, struct file_lock **, void **);
long (*fallocate)(struct file *file, int mode, loff_t offset,
loff_t len);
void (*show_fdinfo)(struct seq_file *m, struct file *f);
#ifndef CONFIG_MMU
unsigned (*mmap_capabilities)(struct file *);
#endif
ssize_t (*copy_file_range)(struct file *, loff_t, struct file *,
loff_t, size_t, unsigned int);
int (*clone_file_range)(struct file *, loff_t, struct file *, loff_t,
u64);
int (*dedupe_file_range)(struct file *, loff_t, struct file *, loff_t,
u64);
int (*fadvise)(struct file *, loff_t, loff_t, int);
} __randomize_layout;

簡單介紹一下這個struct內的member:

  • owner: 擁有該結構的module pointer,一般設置為THIS_MODULE
  • llseek(): 用於修改當前文件的讀寫位置
  • open(): 打開文件
  • read() & write():用來存取文件
  • poll(): 用來輪詢device是否可以進行non-blocking的讀寫
  • unlocked_ioctl() & compat_ioctl(): 提供對設備控制的街口
  • mmap(): 將device memory mapping到process memory,如此就不用做繁瑣的memory copy

function pointer不用全部實現,會用到哪個就實作哪個就好。

繼續閱讀

全台灣最大數據分析競賽上線啦!蝦皮2020數據分析競賽心得

這篇文章紀錄2020/11/21的蝦皮數據分析競賽心得~

競賽介紹

儘管競賽名稱是全台灣最大數據分析競賽,但實際上的競賽內容我覺得還不太夠格冠上這個名稱xD

為何這樣說呢?

首先,組別總共分成學生組和職業組,根據組別其實競賽題型差異極大:

  • 學生組: 考類似leetcode的演算法題型
  • 職業組: 考kaggle數據分析競賽

並且使用的平台都是在kaggle上(不太知道學生組這樣的題型要如何在kaggle上去做排名?)

接下來是競賽時間,他是線下賽,一開始想說一個kaggle的線上賽好說歹說都是星期起跳的,線下賽好歹你也要給個一天的時間吧

結果競賽時間只有2個小時,你沒看錯就是120分鐘而已呢。

繼續閱讀

[讀書心得]富爸爸商學院

書籍資訊

(本文是【富爸爸商學院】的讀書心得和書籍導讀,如果你看完覺得這本書對你是有幫助的,歡迎購買原做支持作者!)
聽到「直銷」或「業務」,你的第一反應是先拒絕再說?
你知道銷售力可以帶來超越想像的成長,培養出過人的商業技巧與成功心態嗎?

跟大多數人一樣,當羅勃特.T.清崎第一次聽到直銷時,他也抱著懷疑的態度。

不過,經過深入了解,他發現直銷產業其實是一所真正的商學院,不只沒有高不可攀的入學門檻,還蘊藏著足以改變一生的核心價值。

繼續閱讀

[課程筆記]Linux Driver正點原子課程筆記1 & 2 - Linux驅動開發 & 字符設備驅動開發基礎實驗

〖想觀看更多課程筆記,至[課程筆記]課程筆記系列總覽可以看到目前已發布的所有文章!〗

Course 1 - Linux驅動開發

驅動開發思維

為何需要Linux driver?

  • 直接在Linux下操作register不現實,太複雜也不安全
  • Linux具有各種驅動框架(driver framework),使得各種設置能夠依照一訂的規範進行開發

Linux下一切皆文件,而所有的driver都放置在/dev/xxx下,可以透過fops(file operation)來操作(打開、關閉、讀寫)

新版的Linux下supoort device tree,是一個.dts,記錄devices information,kernel會去分析.dts文件了解有哪些設備

驅動開發分類

linux 驅動分成三大類

  1. char device driver: 字符設備驅動,按照字符依序存取,大部分的驅動都是這種,e.g. i2c
  2. block device driver: 能以固定大小長度傳送和轉移,可以不需要按照順序操作,e.g. SD card
  3. network device driver: 網路設備驅動,e.g. wifi
繼續閱讀

[論文速速讀]Learning Deep Features for Discriminative Localization

〖想觀看更多中文論文導讀,至[論文速速讀]系列文章介紹可以看到目前已發布的所有文章!〗

前言

paper: https://arxiv.org/pdf/1512.04150.pdf

會寫這篇主要是因為,CNN雖然厲害,對大多數人來說他還是一個人黑盒子,有時候我們根本不知道模型學到了什麼,如果模型沒學好就拿出來用就可能會發生如下悲劇: [新聞] 蘇格蘭AI誤把裁判的光頭當成足球跟拍轉播


將科技應用在運動比賽上是一件很棒的事情,但有的時候,即使是最偉大的發明也有出錯的可能。上週末在蘇格蘭的一場足球比賽中就發生了這樣的事情,一個由 AI 控制的攝影機,不小心把邊審的光頭誤認是足球。
由程式控制的攝影機會自動追蹤球在哪、並且嘗試跟拍,不再需要真人攝像師去控制。除了這會搶走一個人的工作之外,理論上聽起來還蠻有道理的。問題是──攝影機無法分辨足球和光頭的區別,它不斷的聚焦在邊審這個沒太大動作的人身上,而不是場上的球員。

所以解釋性AI就很重要,我們想試著去了解模型學到或看到了什麼。

本文介紹CNN可視化的一種技術,Classification Activaion Mapping (CAM),透過heatmap的方式顯示模型分類時認為圖片重要的依據為何。概念不難但卻非常好用,而且很酷。

在跟老闆介紹時,如果只跟他說模型有多猛架構多炫…老闆可能還是無法理解,有了這個技術就可以拿去跟老闆說”看看我的CNN模型都學到了什麼玩意兒~”

相信老闆看到圖片的效果一定會眼前為之一亮!

繼續閱讀

>