2026년 1월 16일 금요일

인공지능에서 정규화(Normalizing)와 표준화(Standardizing)

 "Normalizing" a vector most often means dividing by a norm of the vector,
for example, to make the Euclidean length of the vector equal to one. In the NN literature, "normalizing" also often refers to rescaling by the minimum and range of the vector, to make all the elements lie between 0 and 1. 

- 정규화(Normalizing) : 데이터 혹은 벡터를 정규화 한다는 것은 벡터의 크기로 벡터를 나누어 크기(Euclidean Length)가 1이 되도록 하는 것이다. 인공지능 영역에서는 정규화 과정을 종종 모든 데이터가 0과 1 사이의 크기를 갖도록 재조정(rescaling)하는 것으로 사용된다.

"Standardizing" a vector most often means subtracting a measure of location and dividing by a measure of scale. For example, if the vector contains random values with a Gaussian distribution, you might subtract the mean and divide by the standard deviation, thereby obtaining a "standard normal" random variable with mean 0 and standard deviation 1. 

 - 표준화(Standardizing - 이거 뭐라읽어야 하나 스탠다디자이징??): 모든 벡터의 평균값을 빼고, 측정된 표준편차로 나누는 작업. 예를 들어 Gaussian 분포(distribution)을 갖는 랜덤 값을 갖는 벡터를 평균이 0이되고 표준 편차가 1이 되는 "standard normal" 랜덤 변수로 만다는 작업을 잃컫는다.

 그럼 뭘써야 하나 그때 그때 다르다. 어쨌든 써야지 만족할 만한 성능을 기대할 수 있다.

Multilayer Perceptron(흔히들 말하는 클래식 인공지능, 다층 fully-connected layer로 구성된 NN)의 경우 입력값이 0과 1 사이어야 한다. 하지만, 사실 어떠한 요구조건은 아니지만 데이터의 평균값이 0이면 좋다. 그래서 데이터가 0과 1사이의 값이 되게만 만드는 행위는 좋은 선택이 아니다.  

 그래서 학습과정 중 최적화 단계의 수치해석적 향상을 위해선 Stadardizing을 입력과 결과값 모두에 적용하는 것이 좋아 보인다. 

참고 자료:

http://www.faqs.org/faqs/ai-faq/neural-nets/part2/

 

인공지능에서 데이터 셋(data set), 샘플(sample), 혹은 모수(population)

  크게 세 종류로 분류된다. 

training set: 입력데이터를 적용해서 실제 결과와 이상적인 결과의 에러를 측정하여 네트워크의 값들을 적절하게 업데이트하는데 사용하는 데이터.

validation set: 위와 같은 학습 중간중간에 학습에 투여되지 않은 데이터를 입력으로 넣어서 마찬가지의 에러를 측정한다. 그래서 과적합(overfitting)을 측정하는데 사용한다. 

test set: 위의 두 종류의 데이터로 최종 학습된 인공지능의 최종 성능을 평가 하기 위한 또 다른 데이터 셋.

종종 validation 과 test set이 혼동된다.

다음은 Ripley가 1996에 쓴 책 Pattern Recognition and Neural Networks (p.354)에 정의한 내용이다.

Training set:
    A set of examples used for learning, that is to fit the parameters [i.e., weights] of the classifier.  - 학습에 사용하는 데이터, 분류기의 내부 파라미터(가중치)를 적절하게 결정하는데 사용한다.


Validation set:
    A set of examples used to tune the parameters [i.e., architecture, not weights] of a classifier, for example to choose the number of hidden units in a neural network. - 분류기의 외부 파라미터(가중치가 아니라 일종의 외부 변수 - 네트워크 깊이, 학습법, 평가법, 학습횟수, 등)을 선택하는데 사용하는 데이터.


Test set:
    A set of examples used only to assess the performance [generalization] of a fully-specified classifier. - 완전히 결정된 분류기의 성능을 평가하기 위한 데이터 셋.

 참고자료:

 Archive-name: ai-faq/neural-nets/part1
Last-modified: 2002-05-17
URL: ftp://ftp.sas.com/pub/neural/FAQ.html
Maintainer: saswss@unx.sas.com (Warren S. Sarle)

Artificial Neural Network 란?

 작은 메모리를 갖는 간단한 연산기가 숫자데이터를 다루고,

이러한 기본 단위의 입력 및 출력 데이터를 네트워크로 난잡하게 연결한 

정리되지 않은 방구석.

참고자료:

Archive-name: ai-faq/neural-nets/part1
Last-modified: 2002-05-17
URL: ftp://ftp.sas.com/pub/neural/FAQ.html
Maintainer: saswss@unx.sas.com (Warren S. Sarle)

이 시점에서 지능이란?

 뭐 지능이란? 이라고 고차원적이고 철학적인 질문이 될 수 있는데 아시다시피 그냥 뉴론의 네트워크 구조 Neural Network임이 생물학적이든 전기공학적이든 기본 토대인 것 같다. 

그래서 지능은 Neural Network 구조 이고 지금으로썬 Biological Neural Network와 Artificial Neural Network가 존재 하고 있고 Biological Neural Network의 존폐가 아주 위태로운 상황이다.

결론은 

Biological Neural Network는 인간꺼. 

Artificial Neural Network는 기계꺼 실제론 Nvidia의 그래픽 카드 꺼.

참고자료:

Archive-name: ai-faq/neural-nets/part1
Last-modified: 2002-05-17
URL: ftp://ftp.sas.com/pub/neural/FAQ.html
Maintainer: saswss@unx.sas.com (Warren S. Sarle)

쿠리어(Courier) 폰트.

 모든 글자가 동일한 폭을 갖고 있는 고정폭(Monospace) 폰트의 대표격이다. 모든 글자라곤 하지만 대부분 영어에만 해당된다. 그래서 어디에 사용되냐면, 프로그래밍/코딩에 주로 사용된다. 이건 내 영역이라 먼저 썼지만, 역사적으로 페이당 분량을 산정해서 먹고사는 영역에서(소설, 영화 작가들) 원고료 산정 방식때문에 많이 사용되었던 듯 싶다. 

 그래서 내 경우 리눅스 터미널, 코드 에디터(EMACS, Visual Studio Code, PyCharm 등)의 기본 폰트로 적극 사용해라라는 메시지를 기억이 가물가물해지는 나에게 남겨두기 위해 여기에 써둔다. 

2026년 1월 14일 수요일

무심코 근 20년간 써왔던 회귀분석 Regression의 정체 드디어 밣혀져.

 선형대수를 배우면서 회귀분석이라고 배우진 않았지만, 같은 작업을 하면서 근 20년간 회귀분석을 해온 듯 싶다. 나중에는 회귀분석이라는 용어로 regression이라는 것을 알았고 classification의 반대 급부에 있는 것이라 머릿 속에 자리 잡았지 용어와 기능이 서로 맞지 않는 것에 대해서 의문시 하지 않았다. 

 "값추정", "값맞추기"가 회귀분석이라고 하는 것의 정확한 용어가 되어야 알맞을 것 같은데 "회귀본능"으로 알고 있는 회귀+분석이라니.

 그 정체를 책을 보다가 알아 버렸다. 

"이 이상한 이름은 프랜시스 골턴(Francis Galton)이 키가 큰 사람의 자녀가 부모보다 작은 경향이 있다는 사실을 연구하면서 소개한 통계한 용어입니다. 부모보다 자녀가 더 작기 때문에 이를 평균으로 회귀한다고 불렀습니다. 그 후 프랜시스가 두 변수 사이의 상관관계를 분석하기 위해 사용한 방법에 이 이름을 붙였습니다."

 - 핸즈온 머신러닝(오렐리앙 제롱 지음, 박혜선 옮김)


regression 

미국∙영국 [ rɪˈɡreʃn ]미국식 [ rɪˈɡreʃn ]

명사 퇴행, 퇴보; 회귀

- 네이버 사전


자매품으로 "리즈시절"이라는 용어도 있다. 

https://www.goal.com/kr/%EB%89%B4%EC%8A%A4/a/q5yd8j6s5qab14dhdu92ozksl


써 봄직한 auto-cpufreq

 사과무니가 그려져 있는 랩탑 컴퓨터가 갖고 싶어 하진 않았지만, 그 혜자로운 배터리 지속 기간은 너무나도 부러웠다. 내가 랩탑을 쓰는 건지 랩탑 밥 챙겨주려고 쓰는 건지 도통 편리하지가 않다. 

Debian 패키지 안에 cpufrequtils라는 패키지가 기본 설치되어 관리해 주지만 앞서 이야기 한 것 같이 많이 아쉽다.

그런데 그 대체제가 있었던 것 같다. 심지어 3.0 버전대가 버젓이 존재하고 있었다. auto-cpufreq라고 하지만, debain 패키지 관리자에서는 관리되지 않고 있는 것 같다. 

소스코드 도적대인 github에서 내려받아 컴파일 하고 설치하는 방법밖에 없는 것 같다. 다른 방법이 있긴 한데 이거 하나 설치하자고 snap 패키지 관리자를 설치하기는 마음에 들지 않는다.

$ git clone https://github.com/AdnanHodzic/auto-cpufreq.git

설치하기

$ cd auto-cpufreq

$ sudo ./auto-cpufreq-installer

설치된 후 버전확인과 시스템에 등록된 상태 확인하기

$ auto-cpufreq --version

$ sudo systemctl status auto-cpufreq

재부팅 전까지만 사용해 보기

$ sudo auto-cpufreq --live

영구히 서비스로 등록

$ sudo auto-cpufreq --install


이 골방에 와서 auto-cpufreq 설치를 혹여나 시도할 수 있으니 주의사항도 남겨둔다. 

debian에 이미 설치된 cpufrequtils와 서로 충돌한다. 다음과 같이 cpufrequtils를 시스템에서 내려야 한다.

$ sudo systemctl stop power-profiles-daemon.service

$ sudo systemctl mask power-profiles-daemon.service

$ sudo systemctl stop tlp.service # if TLP is installed

$ sudo systemctl mask tlp.service # if TLP is installed

# Similarly for any other cpufreq-related service (e.g., cpufrequtils)

재부팅에도 더이상 자동 실행되지 않도록 해주어야 한다. 

$ sudo update-rc.d -f cpufrequtils remove # To remove startup links

$ sudo systemctl stop cpufrequtils.service

# or simply uninstall the package

$ sudo apt remove cpufrequtils