2022년 8월 6일 토요일

2022년 7월 4일 월요일

2022년 6월말 외환보유액 by BOK


✔ 2022년 6월말 우리나라의 외환보유액은 4,382.8억달러로 전월말대비 94.3억달러 감소​
2022년 5월말 기준 우리나라의 외환보유액 규모는 세계 9위 수준​

2022년 6월말 외환보유액

page2image15820928

□ 2022년 6월말 우리나라의 외환보유액은 4,382.8억달러로 전월말 (4,477.1억달러대비 94.3억달러 감소

기타통화 외화자산 미달러 환산액 및 금융기관 예수금 감소외환시장 변동성 완화 조치 등에 기인

□ 외환보유액은 유가증권 3,952.7억달러(90.2%)예치금 192.3억달러(4.4%), SDR 145.7억달러(3.3%), 금 47.9억달러(1.1%), IMF포지션 44.2억달러 (1.0%)로 구성


2022년 6월 15일 수요일

2022년 4월 통화 및 유동성 동향

 2022년 4월중 통화 및 유동성!​

✔ ​ 2022년 4월 M1(평잔)은 전월대비 0.6% 증가 [전년동월대비 +9.5%]​
✔ M2(평잔)는 전월대비 0.2% 증가 [전년동월대비 +9.4%]​
✔ Lf(평잔)는 전월대비 0.2% 증가 [전년동월대비 +8.0%]​
L(말잔)은 전월말대비 0.5% 증가 [전년동월말대비 +7.4%]​

2022년 6월 9일 목요일

2022년 4월 국제수지(잠정)

 출처: 통계청


# 상품수지(흑자)

   - 흑자규모는 전년동월 49.5억달러에서 29.5억달러로 축소

서비스수지(흑자)

  -  운송수지 호조 등으로 전년동월 1.3억달러 적자에서 5.7억달러 흑자로 전환

# 본원소득수지 (적자)

 - 적자규모는 전년동월 39.1억달러에서 32.5억달러로 축소

# 이전소득수지 (적자)

 -  3.5억달러 적자를 시현


# 금융계정은 17.0억달러 순자산 증가

## 직접투자

 - 내국인 해외투자가 57.0억달러 증가

 - 외국인국내투자는 0.8억달러 증가

## 증권투자

 -  내국인 해외투자가 72.0억달러 증가

 - ,외국인 국내투자는 16.9억달러 감소


## 파생금융상품

 -  2.2억달러 증가

## 기타투자

 - 자산이 1.7억달러 증가

 - 부채는 102.2억달러 증가

## 준비자산

 - 29.8억달러 감소




1960년 이후 일본 정부 예산 구성의 변화

 공공 사업, 교육, 방위비 등 공공부분, 즉 국가 발전을 위한 사업의 투자 비중은 계속 줄고, 

사회보장보장 비용, 국채 이자 같은 소모성 예산 비중은 1960년 12.6%에서 2020년 57.6%로 크게 늘어남. 


이중 국채 이자 비용이 전체 예산 중 차지하는 비중이 크게 늘어, 

다른 공공 부분에 예산을 집행하고 싶어도 이자 비용이 발목을 잡는 구조로 변화함. 





일본정부의 연간 예산 구성의 가장 큰 이유는 노인인구의 급증으로 젋은(2030)세대에게 투자하기 보다는 인구 비중이 큰  60대 이상 사회보장에 예산을 더 많이 할당하기 때문으로 보인다.  

 EU 즉 유럽연합이 빠르게 일본화되고 있다. 이탈리아 스페인이 일본과 비슷한 노령화 속도로 현재 성장율이 거꾸로 가고 있기 때문에 우리도 노령화 사회에 대한 대응이 필요하다.  

MBTI 로 보는 주식하는 패턴

 ESTJ #주식 시나리오 작가  

계획이 생활화되어 있는 ESTJ가 주식을 시작한다면 전문 용어 익히기, 사업 보고서와 재무제표 보는 법부터 추적 관찰하는 법까지 공부한 뒤 뛰어들 가능성이 높다. ‘관심 있는 종목이 2% 이상 급등할 때 매수하기’ 등의 구체적인 시나리오와 자신만의 매뉴얼, 최악의 경우를 3가지 이상 미리 생각해 놓기 때문에 충동적 구매 등은 하지 않는 편.  

 

ESTP #주식 정보통

주변 일에 관심이 많아 어디를 가든 ‘정보통’ 소리를 듣는 ESTP. ‘내가 아는 사람이 그러는데 이 종목이 열 배 이상 오를 것 같대’, ‘요즘 이 회사가 뜬다는데?’라며 틈만 나면 주식 이야기를 해 사람들 관심을 끈다. 하지만 사람들이 하는 말을 곧이곧대로 듣기 때문에 정작 정보를 신뢰하기란 어렵다.  

 

ESFJ #모두 성투하세요

가열차게 주식 시장에 뛰어들었다가 ‘파란 맛’을 보고 주식 관련 커뮤니티, 카페에 ‘속상하네요’라고 글 쓰는 사람 꼭 있다. 그런 글에 ‘신경 쓰지 마세요’, ‘멘탈 꽉 잡으세요’라고 댓글 달아주는 사람? 리액션 부자 ESFJ 일 가능성이 크다. 상대방의 기분을 살피는데 특화된 이 유형과 함께라면 슬픔도 잠시, 툭툭 털고 다시 일어설 수 있지 않을까?

 

ESFP #주식 때문에 울고 웃는 1인  

‘요즘 주식 안 하면 바보라며?’ 소리에 눈이 번쩍 뜨여 주식 시장에 뛰어들었을 법한 유형. 사람에게 둘러싸이는 것을 좋아해 주식 단톡방, 모임 등에 열심히 참여하지만 논리적 분석보다 사람을 보고 결정을 내리기 때문에 주식에서 재미를 보기 힘들다. '주식 리딩방', ‘유료 주식방’처럼 돈을 내면 유료 종목을 추천해ㅍ준다는 유혹에 넘어갈 위험도 있으므로 웬만하면 주식에서 손 떼는 것이 좋을 듯.

 

ENTJ #내가 공부하고 만다

자기 비전이 매우 확고한 ENTJ는 남이 이래라저래라 하는 조언에는 귀를 기울이기보다 스스로 정보를 찾고 분석해 유망 업종 및 종목을 발굴해 몇 개월 만에 수익을 낼 가능성이 높다. 물론 그 과정 중에는 실패도 있을 수 있다. 하지만 시간 낭비하는 것을 끔찍이 싫어하기 때문에 여러 사람과 정보를 공유하며 도전하기보다는 혼자 이렇게 해보고 저렇게 해보며 깨달음을 얻는다.

 

ENTP #이랬다가 저랬다가 왔다 갔다

관심사가 다양하고 호기심이 많아 일을 잘 벌이는 ENTP는 주식도 다양하게 투자한다. 증권사 전문가의 자문을 받다가, 유튜브, 주식 커뮤니티를 참고했다가, 카카오톡 오픈 챗방을 이용해 정보를 얻다가 하는 식이다. ‘미니스탁’처럼 별도의 환전 없이 해외 주식을 주문할 수 있는 모바일 애플리케이션과 같은 새로운 투자 방법도 일단 사용하고 본다. 그러다가 한순간에 ‘주식 시작한 게 정말 잘한 일일까?’ 하며 의문을 갖는 형.

 

ENFJ #주식 스터디 리더는 바로 너  

ENFJ는 주식 스터디를 하면 잘 운영할 타입이다. 눈치가 빠르고 여러 사람과 협업을 잘 하는 데다 관심이 생기면 한곳을 깊게 파는 성향이 있어 그렇다. 주식 스터디 회원 모집해서 매주 특징주를 분석하고 유망 종목을 함께 선정하며 열정적으로 주식 공부에 임하지만 주식 스터디한다 그래놓고 참여 안 하는 사람들 때문에 속앓이를 할 수도 있다.

 

ENFP #언젠간 벌 수 있겠지

ENFP는 초심자의 행운에 힘입어 주식에 입문했을 가능성이 크다. 한번 충동적으로 투자했다가 이득이 난 것을 계기로 주식 시장에 뛰어들게 된 것. 이후 손실의 쓴맛을 많이 봤음에도 불구하고 ‘언젠간 벌 수 있다’는 믿음으로 계속 주식을 할 타입이라 지속적인 주변 사람들의 관심과 주의가 필요하다.

  

ISTJ #대장주로 안전하게

원칙주의자 ISTJ는 거북이처럼 기다리는 장기 투자에 적합한 스타일이다. 이 유형에게는 안전이 최우선이다. 비상장 주처럼 미래를 알 수 없는 주식을 거래하기보다 삼성전자, SK 하이닉스, 삼성바이오로직스, 네이버 등 대장주들을 1주씩 구매하며 성취감을 느낄 듯하다.

 

ISTP #주린이 말고 주대생

하나에 꽂히면 끝까지 파는 스타일인 ISTP는 같은 시기에 주식을 시작한다 하더라도 남들보다 더 빠르게 ‘주린이’에서 ‘주대생’이 될 가능성이 높다. 매일매일 업데이트되는 주식 관련 정보를 실시간으로 섭렵하는 것은 물론, 국내뿐만 아니라 해외 커뮤니티를 넘나들며 정보를 취합해 자신만의 정보력을 쌓아가기 때문. 전문 애널리스트 수준의 정보력을 갖추는 것은 ISTP 에겐 시간문제일 뿐이다.

 

ISFJ # 애널리스트로 적격  

엑셀에 분 단위로 계획을 적고, 칼로 잰 듯 일하는 ISFJ는 주식을 시작한 날부터 주식 일기를 쓰고, 관심주의 추이를 매일 관찰하면서 자신만의 리포트로 정리해두었을 가능성이 높다. 매일 아침 9시, 장이 열리면 변동 추이를 확인하고 기록해 두는 것은 ISFJ의 일상이 된 지 오래. 스스로 묵묵하게 일하는 것을 좋아하기 때문에 데이터와의 싸움인 분석 관련 일을 하면 잘 할 듯하다.

 

ISFP #눈치 보다 동학 개미 운동에 참여  

ISFP는 주식에 별다른 관심을 두지 않다가 다른 사람들이 하니까 그에 발맞춰 ‘동학 개미 운동’에 참여했을 듯한 유형이다. 감정 표현을 잘 하지 않기 때문에 주식 때문에 울고 웃는 일이 적다. 남들이 주식에 열을 올릴 때 ‘뭔 소리야’ 하고 회피하기 보다 대충 무슨 소린지는 알아듣는 수준으로 주식을 유지할 스타일.

 

INTJ #주식, 유튜브로 배웠어요

유튜브를 스승으로 삼아 주식 열풍에 참여했을 듯한 유형이다. 각종 증권 관련 강의. 리딩 방송 찾아다니며 국내 주식, 해외 선물 등 다양한 분야로 관심 저변을 넓힌다. 분석력이 뛰어나기 때문에 주식을 할 때 전략적으로 투자하며 주식 시장의 움직임을 어느 정도 파악하는 경지에 오르면 전업으로 개인투자자로 전향할 수도 있다.

 

INTP #주식보단 그림이지

기발하고 혁신적이며 가끔은 엉뚱한 INTP는 남들 다하는 주식보다 새로운 것에 주목하는 것을 선호한다. 기존 투자 방식이 아닌 금, 그림 등에 투자하는 것. 개인이 구매하기 힘들다고 해서 포기하지 않는다. 다수의 참여자가 미술 작품을 공동 구매해 소유권을 나눠 가진 뒤 렌털, 매각 등으로 이익을 취하는 그림 P2P를 찾아 투자하는 것이 INTP의 방식인 것.

 

INFJ #존버는 승리한다

뛰어난 통찰력과 강한 인내심을 지닌 INFJ는 주식 하나 사놓고 오를 때까지 기다릴 법한 유형이다. 예전부터 주식을 좀 해왔던 INFJ라면 요즘 주식인들의 최대 관심사인 미국 대장주, 구글, 애플, 아마존, 테슬라 들의 주식을 이미 사두어 대박이 나 있을 지도 모를 일.

 

INFP #나 대신 손절 좀 해줄래

감정이입을 잘하고 상상력이 풍부한 INFP는 뉴스를 볼 때마다 내 주변 이야기처럼 느낄 가능성이 높다. 공감 능력 뛰어난 나머지 손실로 인해 우울해하는 사람에게 감정 이입해 함께 울기도 하고, 손절을 해야 할 땐 마음이 아파서 다른 사람에게 대신해달라며 부탁할 수도 있다.


2022년 5월 26일 목요일

반도체 공급 부족

 2020년 후반부터 반도체 부족은 심각해지고 2021년이 지났지만 반도체 공급 부족이라는 문제의 해결은 멀어져간다.  이것은 2020년 전반부터 시작된 COVID-19(신형 코로나바이러스 감염증)으로 시작되었는데, 판데믹이라는 세계적인 대 유행은 경기하강으로 수요가 줄 것이라는 우려와는 반대로 반도체 수요를 크게 증가 시키는 방향으로 나아갔다. 

 코로나 바이러스는 연속적으로 돌연변이로 파생되었다. 초기에는 위험성이 강했지만, 점차 변이가 되면서 전파되는 감염력이 강한 오미크론이 주가 되었고, 2022년 3월 시점에서는, 감염성은 아주 크지만, 위험성은 약하기 때문에 제한적인 부분부터 경제활동의 제한을 완화하고, 백신접종의 보급을 병행하면서 위험성에 대비하고, 그래서 중증화를 막는 대책이 선진국의 주류가 되었다. 

경제활동의 재개는 반도체 수요의 추가 확대를 의미한다. 반도체 부족이 완화되는 것은 2024년이 된다는 것이 반도체 업계에서는 거의 공통의 전망이다.

반도체 부족의 완화를 위한 큰 움직임이 생산규모의 증강이다. 장래의 생산능력은 현재의 설비투자금액에 크게 좌우된다. 한 연차 설비투자는 대략 2년 후에 실제 양산공장, 즉 생산능력이 증가하여 현실화한다.


시장조사회사인 IC Insights가 2022년 3월 1일에 발표한 조사 결과에 따르면 2022년 반도체 설비 투자액은 전년 대비 24% 증가한 1,904억 달러에 달하는 모양이다. 반도체 설비투자액은 2020년 전년 대비 10% 증가해 과거 최고를 경신했다. 이어 2021년은 전년 대비 36% 증가한 1,539억 달러로 급증해 과거 최고의 갱신을 이어갔다. 이대로 3년 연속으로 설비투자액은 과거 최고를 갱신하게 된다.

2022년 초대형 설비투자는 2024년에는 생산능력의 대폭 증가가 되어 현실화될 것으로 보인다. 이것은 판데믹 유행 초기에 우려했던 수요 감소가, 2024년에 나타날 것으로 보이며, 이 예측이 현실이 되면 반도체 공급과잉과 가격이 붕괴한다. 반도체 업계는 과거에도 같은 것을 경험하고 있기 때문에 수급 밸런스를 항상 주의깊게 보고 있다. 수급이 크게 완화될 것 같은 경우는 2023년 후반~2024년 전반에 제조 장치의 납품을 앞두는 움직임이 있을 것이다.


2022년 5월 23일 월요일

Integer Quantization for Deep Learning Inference

 Nvidia에서 발간한 Integer Quantization for Deep Learning Inference이다. 2020년 4월에 공개되었으며, Low Bit 양자화에 대한 개념을 소개하고 있다. 있 

Uniform vs Non-Uniform

양자화를 진행하는 방법에는 큰 범주에서 2가지가 있다. 먼저 균일 양자화(Uniform) 방법이다. 이는 Floating Point로 되어있는 Input이나 가중치를 정수형태 또는 고정소수점 형태로 변환하여 연산하는 형태이다. 변환 이후의 값이 가지는 표현범위를 보면 균일한 간격으로 구성이 되어있다. 예를 들어 8-Bit 데이터 타입이라면 -128 ~ 127까지 표현 범위를 가지고 있으며 간격은 1씩 떨어져있다.

 

비균일 양자화(Non-Uniform)은 일반적으로 Code Book을 사용하여 맵핑을 하는 방식을 택한다. 예를들어 가중치가 [[0.1, 0.5, -1.2], [-2.1, 1.5, 0.1], [-3.1, 2.1, 0.3]] 이라고 하였을때, 음수: 0, 0~1:1, 1이상:2 이렇게 대응되는 코드북을 만드는 개념이다. 사용자가 정해놓은 Rule을 적용해서 이 코드북을 만들기 때문에 비균일 양자화 방법이라고 한다. 논문에서는 균일 양자화에 대해서만 초점을 맞춰 진행한다.

 

 

Affine Transform vs Scale Transform

균일 양자화를 진행할때 어떤 수식을 통해 진행할것인가에 대한 내용이다. 마찬가지로 두가지 방식이 있는데, Affine Transfrom과 Scale Transform 방식이다. Affine Transform은 Asymmetric이라고도 하며 Scale Transform은 Symmetric 라고도 불린다.

 

 

먼저 Affine Transform에 대해서 알아보자.

 

f(x)=sx+zs=2b1αβz=round(βs)2b1

 

여기서 α,β는 입력값의 Min, Max를 의미한다. 모든범위에 대해서 Min, Max를 설정하면 적절하지 못하므로 Cutoff를 설정하고 Clip함수를 이용하여 잘라낸다. 위 그림의 (a)를 참고하면 알 수 있을것이다.

 

만약 8-Bit 양자화를 진행한다고 하면 Max값에 해당하는 α가 127로, Min값에 해당하는 β는 -128로 scaling된다. z는 zero-point를 의미하는데, 변환되기 전 0의 위치가 양자화 후 어떤점으로 대응되는지 정확하게 표현하기 위함이다. 이렇게 함으로써 입력값의 분포를 고려한 양자화가 가능하다.

 

전체적인 수식을 살펴보면 아래와 같이 표현할 수 있다.

 

xq=quantize(x,b,s,z)=clip(round(sx+z),2b1,2b11)

 

양자화된 값을 다시 원래값으로 복원 시키기기 위해서는 곱하고 더해준 방법을 거꾸로 진행한다. 즉, 빼고 나눠주면 된다. 양자화를 한 후 복원을 시키는 과정을 거치게되면 x^x에 근사하게 된다는점을 기억해두자(추후 Fake_Quantization이란 용어를 사용한다).

 

x^=dequantize(xq,s,z)=1s(xqz)

 

이제 Scale Transform을 알아보도록 한다. Symmetric이라고 불린다고 하였는데, 그 이유는 입력값의 0이 양자화가 된 후 0의 값으로 정확히 대응되는 방법이기 때문이다(그림 (b)). 8-Bit로의 표현은 -128 ~ 127까지 표현가능하지만 대칭을 이뤄야하기 때문에 -128의 값은 사용하지 않는다. 또한 α값으로 Max만을 사용한다.

 

f(x)=sxs=2b11αxq=quantize(x,b,s)=clip(round(sx),2b1+1,2b11)x^=dequantize(xq,s)=1sxq

 

Quantization Granularity

어떤 세분화 단위에 입각하여 양자화를 진행할것인지에 관련한다. 예를들어 Tensor단위로 양자화 할것인지, 아니면 per Channel 단위로 양자화를 할것인지다. 저자는 정확도와 연산비용 두가지 측면을 고려해서 다음과 같이 제안하였다.

 

  • weight: per-column(2D), per-channel(3D), per-tensor
  • activation: per-tensor

 

활성화의 경우는 성능상 이유로 텐서단위 양자화가 실용적이라고 말하고 있다. 가중치의 경우에는 텐서단위 또는 채널단위 두가지를 모두 사용한다.

 

일반적인 신경망모델과 달리 비교적 EfficientNet의 경우에는 Depwise-Sperable Convolution 연산을 진행한다. 연산이 채널별로 각기 진행되기 때문에, per-channel 양자화를 진행해야하며 per-tensor 양자화를 진행하게되면 가중치의 분포가 흐트러지게 되어 성능이 더욱 나빠지게된다.

 

Computation Cost

우선 Scale Transform의 연산에 대해서 살펴보도록 하자.

 

yi,j=k=1pxikwkjk=1pdequantize(xq,ik,sq,ik)dequantize(wq,kj,sw,kj)=kp1sx,ikxq,ik1sw,kjwq,kj

 

맨 마지막 산식을 보면 아주 간단한 표현으로 나타나게 되있음을 알 수 있다. activation과 weight가 모두 양자화 되어있고 정수이기 때문에 빠르게 연산할 수 있음을 알 수 있다. Xq는 Offline에 계산될 수 없기 때문에 분명 연산상 오버헤드기는 하지만 내적 연산부분이 1개밖에 구성되어있지 않다.

 

이제 Affine Transform을 살펴보자.

 

yi,jk=1p1sx(xq,ikzx)1sw,j(wq,kjzw,j)=1sxsw,j(kpxq,ikwq,kjkpwq,kjzx+zxzw,jkpxq,ikzw,j)

 

맨 마지막 산식을 보면 Xq가 한번 더 들어가있다. Offline에서 연산할 수 없는 텀이 두개나 들어가있다. 이는 Inference Time에 큰 오버헤드로 작용한다. 물론 Affine 방법이 정확도 측면에서는 좀더 우위를 차지할 수 있지만, 연산비용을 고려했을때 Scale 방법을 사용하는것이 더 좋다고 설명한다. 또 Scale 방법을 사용해도 정확도 손실이 엄청나게 큰것도 아니다.

 

Calibration

양자화를 진행할때 Scaling을 하기위한 α,β를 구하는것을 확인하였다. 앞에서는 Min, Max 방법을 이용한 예시를 들었으나, 사실 몇가지 방법이 더 존재한다.

 

 

  • Max: 원소값중 가장 큰 값의 절대값을 α로 설정한다.
  • Entropy: 양자화된 값과 기존 Floating-Point로 된 값의 차이가 최소가 되도록 α를 설정한다. TensorRT 프레임워크에서는 Entropy가 디폴트이다.
  • Percentile: 입력값의 분포를 백분위수로 나타내서 0.1%, 0.01% 등 사용자가 설정한 값에 해당하는 값을 α로 설정한다.

 

Activation의 경우 Calibration을 진행하는것이 상당히 까다롭다. Input은 Offline에서 알 수 없는 변수상태라서 반드시 이미지가 들어온 후 Calibration이 진행되어야 한다. 또한 몇장의 이미지가 필요한지도 알 수 없다. 때문에 최대한 많은 샘플을 통해서 Calibration을 진행하는것이 효율적일것이며, 학습과 추론이미지의 분포를 최대한 유사할 수 있도록 이미지 획득을 하는것이 중요할 것이다.

 

Post-Training Quantizatio(PTQ)

이제 학습이 완료된 모델을 이용해서 양자화를 진행하는 PTQ의 결과에 대해서 알아볼 차례이다. 저자는 아래 그림과 같은 모델에 대해서 실험을 진행하였다.

 

 

이미 학습이 완료되었기 때문에, Offline에서 가중이나 학습 파라미터들이 모두 설정되어있다는 특징이 있다. 때문에 Batch Norm Layer를 Bias처럼 취급하여 Conv Layer와 함께 Folding(Fusion이라고도 한다)하여 전체 Layer의 수를 줄일 수 있다.

 

 

위에서도 설명했듯이 EfficientNet과 같은 특이한 형태의 Convolution을 하는 경우 Per-tensor의 사용을 조심하라고 설명했다. BN 또한 채널단위로 학습이 진행되기 때문에 무작정 Folding 하는것은 Weight의 분포를 박살내는것과 다름없다. 즉, 무작정 Folding을 하는것이 아니라 모델 아키텍쳐를 따져봐야한다는것을 알 수 있다.

 

Weight는 Per-Channel(또는 Per-Column)과 Max Calibration을 적용한 결과와 Activation에 대해서는 Per-Tensor와 다양한 Calibration을 적용했을때의 결과이다.

 

 

InceptionV4와 EfficientNet의 경우에는 Max Calibration을 적용했을때 결과가 매우 좋지 않다. 이는 활성화출력의 분포가 매우 극단적이라는것을 의미한다. 비교적 최신 모델이라고 불리는 모델에서 이러한 경향이 많이 나타나는데, 모델 아키텍쳐가 복잡해지기 때문이라 생각이 든다.

 

전체적인 경향성을 보았을때 Entropy 접근법이 가장 일반화적인 방법으로 보이며, TensorRT 프레임워크에서는 Entropy가 디폴트 Calibration 방법이다.

 

Partial Quantization

양자화를 진행하였을때 정확도 측면에서 좀더 개선할 수 있을 여지가 있다. 바로 Partial Quantization이다. 이 방법은 모든 Node를 양자화 진행하는것이 아니라, 마치 DropOut과 같이 몇개의 Node에서는 양자화를 진행하지 않는 방법이다.

 

 

신경망의 각 Layer를 Sensitive 기준으로 내림차순하여 하나씩 양자화를 죽여나가는 방법이다. 이때 Sensitive를 선정하는 기준은 안타깝게도 자세히 기재되어있지 않다. 어쨋든 이러한 방법으로 양자화를 단계적으로 진행을 하게되면 정확도를 보존할 수 있음을 보여준다.

 

 

Quantization-Aware Training(QAT)

학습이 진행되기 전 양자화를 진행하는 방법이다. 이전 포스팅에서 다루었던 Bi-RealNet, DoReFa-Net, XNOR-Net이 QAT에 해당한다. 일반적으로 QAT는 PTQ보다 성능이 우월하다. 이유는 아래 그림과 같다.

 

 

PTQ 방법은 이미 학습이 완료되어서 Global Minimun에 최적화되어있는 가중치를 덜 최적화된곳으로 보내버리게 된다. 이때 Loss가 Deep Convex인 경우에 문제가 발생한다. 가중치가 최적화된곳을 이탈하면서 Loss가 크게 상승하게된다(그림 6a).

 

하지만 QAT 방법은 이러한 문제를 방지한다. 학습을 진행하면서 최적화를 진행하기 때문에 가중치가 Deep Convex에 빠지기 어렵고, 오히려 narrow minima에 수렴하게 된다. 이 경우에 양자화가 진행되면 Loss의 형태가 Wide하기 때문에 PTQ 방식보다 성능이 더 좋게된다.

 

추가적으로 QAT 방식의 양자화는 앞서 얘기했던 Fake Quantization을 이용한다. Quantization을 진행하여 정수타입으로 변환 후 행렬연산을 진행하면 연산비용에서 상당히 이점을 가져올 수 있기 때문이다. 역전파가 불가능한 문제가 있기 때문에 STE 방법을 도입하며, 이것은 이전 포스팅에서 많이 다루었기 때문에 생략하고 넘어가겠다.

 

Recommended Workflow

저자가 여러 방법으로 실험을 한 이후 다음과 같은 양자화 방식을 제안한다.

 

 

int8 양자화 방법으로는 아래와 같이 적용한다.

 

  • weight: Scale Quantization 방식과 Per-Channel, Per-Column granularity를 적용한다. Calibration으로는 Max 방법을 사용한다.
  • Activation: Scale Quantization 방식과 Per-Tensor granularity를 적용한다.

 

신경망을 양자화하기 위한 과정으로는 아래와 같은 순서로 적용해 나간다.

 

  • PTQ: PTQ 방법을 우선적으로 고려한다. 앞서 학습했던 Max, Entropy, Percentile Calibration에 대해서 다양하게 적용해가며 성능을 확인한다.
  • Partial Quantization: PTQ 방법이 조금 아쉬울때 적용해본다. Sensitive 기준으로 내림차순하여 하나씩 양자화를 죽여나가며 성능을 확인한다.
  • QAT: 위 두가지 방법으로도 성능이 개선되지 않을때 사용한다.

 

Conclusions

양자화의 기본개념에 대해서 아주 상세히 설명해주어서 나와같은 입문자에게 엄청 도움이 되었다. 영어단어 선택이나 문장구성이 비교적 읽기 편하게 되어있어서 이해가 쉬웠고, 특히 Pytorch로 실험이 이루어져있어서 추후 적용하는것도 손쉬울것 같았다. 양자화 적용을 한번 도전했다가 실패했던 경험이 있었는데, 이 내용을 토대로 다시한번 도전을 해 보아야겠다.