기술면접 대비 CS/ML 지식 정리

Dyung·2025년 8월 22일

CS 지식

자료구조

수치화 판단 기준

시간 복잡도와 공간 복잡도

주요 구조

배열과 연결 리스트
스택과 큐
해시 테이블
트리
그래프

데이터베이스

키워드

데이터베이스와 DBMS
데이터베이스와 파일 시스템의 목적
엔티티와 스키마
트랜잭션과 ACID

RDBMS와 SQL

RDBMS의 기본 : 테이블 규칙, 무결성 제약 조건, key
SQL 간단한 활용 예제
효율적 쿼리 : 검색 성능 높이기, 인덱스, 뷰, 조인,
데이터베이스 설계 : 정규화란?

NoSQL

특징
MongoDB
Redis
Vector DB




ML 지식

1.데이터셋 수집/정제/선택

(1) 수집
일괄 처리나 스트리밍을 할 수 있다. 랜덤 샘플링, 계층화 (stratified) 샘플링으로 적절하게 선택한다. 서빙 편향과 같이 수집 기법으로 인해 발생하는 편향을 인식하고 밴딧 기법과 같은 대책을 적용한다. 부적절한 샘플링은 데이터셋이 좁아지거나 동질화되어 일반화 능력과 예측 다양성이 좁아지는 것을 의미한다.
데이터셋에는 모델의 매개변수 개수보다 한 자릿수 이상 많은 데이터 포인트가 있어야 한다.

(2) 정제
누락, 중복을 확인한다. 이상치를 찾고, 관련없는 정보를 제거하고, 오류를 수정한다. 누락의 경우 평균값 대체를 사용할 수 있다.
무작위 누락(missing at random, MAR)이 아닌 이상, 모델 학습에 부정적인 영향을 미친다.

(3) 레이블링
지도학습의 경우 지정한다. 레이블링 지침이 모호하거나 작업자 간 일관성이 부족해서 생기는 노이즈에 주의한다. 오류를 줄이려면 가중치 투표 또는 레이블 검증과 같은 기법을 사용해야 한다.

(4) 분할
데이터를 학습, 검증, 테스트 셋으로 나눈다. 검증 셋은 얼리스타핑, 하이퍼파라미터 튜닝 등 학습 중 모델 성능을 평가하는 데 사용한다.

(5) 전처리
모델에 적합한 형식으로 정규화, 스케일링, 변환한다.

(6) 클래스 불균형 확인
불균형 데이터셋으로 작업할 때 실제 분포에 대해 학습을 시도해야 한다. 모델이 실제 분포에 대해 잘 학습하고 일반화할 수 있다면 문제가 심각하지 않게 된다.

데이터의 클래스 분포는 모델 성능에 영향을 미친다. 학습이 느리게 수렴하거나 소수 클래스를 잘 인식하지 못한다. 다운샘플링된 클래스에 가중치를 높여 보정을 할 수 있다. 이를 리샘플링이라고 하는데 이 외에도 소수 클래스의 새로운 합성 데이터를 생성하는 STOME 과 같은 기법을 사용할 수 있다. 앙상블(부스팅, 배깅 등 데이터의 다양한 하위 집합에 대해 학습)을 사용할 수도 있다.

정밀도 지향 모델링도 있다. 의사결정트리와 변형인 랜덤 포레스트, 부스팅 트리 등에서는 엔트로피가 높거나 샘플이 희소한 경로를 잘라낼 수 있다. 도메인 특화 의도 분류(IC)와 같은 특정 자연어 이해 시나리오에서는 규칙 기반으로도 의사결정 목록으로 분해해 좋은 성능을 얻을 수 있다. 확률기반 출력(로지스틱 회귀) 모델은 임곗값을 조정할 수 있다.

(7) 피처 선택
수치형 피처와는 다르게 자연어는 범주형 피처이다. 범주형 피처는 원핫, 멀티핫 또는 그것에 가중치를 부여한 tf-idf 형식으로 나타낼 수 있다. 범주형 피처를 수치 벡터로 변환할 수 있다. 임베딩을 사용하는 것이 그 예인데 입력 어휘 집합이 크고 자연어 텍스트처럼 값들 사이에 잠재 관계가 있는 경우에 유용하다.
범주형 피처는 해싱 함수를 이용해 더 작은 공간으로 압축이 가능하다. 이를 해싱 트릭이라고 하는데 ID값의 예처럼 추론 시에 OOV가 많은 피처에 유용하다. 증분적(incrementally)으로 새로운 샘플에 모델을 처음부터 학습시키지 않고도 대응할 수 있기 때문이다.

2.경사하강법/활성 함수/손실 함수

경사하강법은 학습률에 따라 각 데이터 포인트에 따른 가중치 업데이트를 수행한다. SGD는 표본 크기가 작으므로 경사 추정의 변동성이 커서 오버슈팅이 발생할 수 있다. 미니 배치 경사하강법은 작은 배치의 샘플(32~256개)에 대한 가중치 업데이트를 계산하여 경사 추정의 분산을 줄여 더 부드럽게 수렴한다. 단점은 학습률이다. 학습률이 너무 높으면 발산이 일어나기도 하고 낮으면 수렴 속도가 너무 느려진다. 학습률을 모든 가중치에 균일하게 적용하게 되면 피처의 희소성이 고려되지 않는다. 경사하강법의 문제를 해결하는 최적화 알고리즘은 모멘텀, 에이다그래드, 에이다델타와 RMSProp, Adam 등이 있다.Adam은 RMSProp 에 관성(momentum)을 추가한 것인데, 분모에 기하급수적으로 감소하는 제곱 경사의 평균을 축적하는 것 외에도 분자에 기하급수적으로 감소하는 경사의 평균을 저장함으로써 관성을 반영한다. 마스킹 적용 DNN에는 모멘텀을 적용하면 의도하지 않은 가중치 업데이트가 발생하여 모멘텀과 애덤을 사용하지 말아야 한다.

신경망의 활성함수는 시그모이드, 소프트맥스, 하이퍼탄젠트, 소프트사인, ReLU, 소프트플러스, Leaky ReLU, PReLU,ELU,SELU,Swish 등등 매우 많은 함수가 있다. 시그모이드는 입력을 0~1 사이로 매핑함으로써 확률을 생성한다. 문제는 입력값이 너무 크거나 너무 작게 포화되면 경사 소실이 된다는 점이다. 소프트맥스는 다중 클래스 분류 문제의 출력층으로 자주 사용되며 입력값을 여러 클래스에 대한 확률 분포로 매핑한다. ReLU는 음숫값을 0으로 대체하고 양숫값은 그대로 유지함으로써 함숫값의 포화를 방지하는 부분 선형 함수이다. 따라서 경삿ㅅ값이 시그모이드나 하이퍼탄젠트에서처럼 소멸하지 않는다. dying ReLU가 문제인데, ReLU 함수에 대한 입력이 음수가 되어 출력이 0이 됨으로써 비활성화되어 역전파 중에 경사가 0이 될 때 발생한다. 복구가 매우 어렵다.

ML에서 일반적으로 사용하는 손실 함수는 다음과 같다. 평균제곱오차(MSE, L2손실), 평균제곱로그오차(MSLE), 평균절대오차(MAE), 후버 손실, Log-Cosh 손실, 포아송 손실, 쿄차 엔트로피 등이다.

3.학습 기법/평가 기법/평가 지표/최적화

비지도 학습 기법
k-means
EM
PCA
t-SNE
SVD
AutoEncoder
VAE
RBM
GAN

알고리즘

의사결정트리 : 데이터를 더 작은 하위 집합으로 반복 분할해 트리와 같은 의사결정모델을 만들어내는 ML 알고리즘이다. 트리의 각 내부 노드는 특정 피처값을 기준으로 하는 분할을 수행하고, 각 분기는 분할 결과가 되며, 각 리프노드는 출력을 나타낸다. 분할 기준은 일반적으로 순도에 기반한 지니 지수 또는 정보이득에 기반한 엔트로피이다.

랜덤포레스트 : 의사 결정 트리의 앙상블이다. 각 트리는 데이터의 무작위 하위 집합에 대해 학습되며 각 분할에서 피처의 무작위 하위 집합에 대해 학습된다. 모든 트리의 예측을 결합해 최종 예측을 생성하는 데 분류문제에서는 다수결이고 회귀문제에서는 평균을 사용한다. 이러한 조합은 분산이 줄어들과 일반화 성능이 향상되지만 해석 가능성이 낮아진다는 단점이 있다.

그래디언트 부스팅 결정 트리(GBDT) : 의사 결정 트리의 앙상블이다. 각각의 새 트리는 이전 트리에서 발생한 오류를 수정하도록 학습된다. GBDT는 의사 잔차라고도 하는 예측 손실함수(MSE)의 음의 경사를 예측하도록 새로운 트리를 학습시킨다. 분할 기준은 일반적으로 손실 함수를 기반으로 한다. 랜덤 포레스트와 달리 GBDT의 트리는 서로 독립이 아니며 모든 트리의 예측을 가중 결합해 최종 예측을 한다. 트리를 순차적으로 학습시켜야 하지만 개별 트리의 학습 특히 분할 절차는 분산 처리할 수 있다. 정보 이득 휴리스틱 대신 학습 손실을 기반으로 분할하고 학습 후에 가지를 잘라내는(pruning) 대신 정규화를 적용한다.

부스팅과 배깅은 예측 모델의 정확도를 향상하는 데 사용하는 인기 있는 기법이다. 두 기법 모두 여러 개의 모델을 구축하고 예측을 결합해 최종 출력을 생성한다. 공통점은 앙상블 방법이라는 점이다. 목표는 모델의 정확도를 높이고 분산을 줄이는 것이다.

부스팅이란? 모델을 반복적으로 학습시키는 데 각 후속 모델이 학습되면서 전체 성능이 향상되는 순차적 프로세스이다. 이전의 잘못된 분류에 초점을 맞춰 이전까지의 모델을 개선한다. 과적합이 쉽다.

배깅이란? 여러 모델을 병렬로 구축하며 각 모델은 학습 데이터의 서로 다른 부분 집합에 대해 학습함으로써 이상치와 노이즈에 대한 강건성을 높인다. 분산처리가 보다 용이하다. 속도가 빠르다.

평가 지표
정확도 : 특정 유형의 오류가 특히 중요하지 않을 때 확인 용도
정밀도 : 모든 양성 예측 중에서 참 양성이 차지하는 비율. 거짓 양성(FP) 발생 최소화가 목표일 때 사용함.
재현율 : 모든 양성 사례 중에서 참 양성이 차지하는 비율. 거짓 음성(FN) 발생을 최소화하는 것이 목표일 때 사용함.
F1 점수 : 정밀도와 재현율의 조화평균임. 낮은 정밀도 또는 낮은 재현율에 신경써야 할 때 사용함.
정밀도@k : 랭킹 문제에 적합한 정밀도 지표. 시스템이 반환한 상위k개 결과 중 참 양성이 차지하는 비율임.
AUC : 정밀도 대 재현율 곡선의 아래 영역의 넓이임. 시각화와 임계값 지정에 유용함. 양성 데이터가 적은 경우에 ROC보다 유용함.
ROC : 참 양성률과 거짓 양성률 곡선의 아래 영역의 넓이임. 양성 클래스가 다수거나 클래스가 상대적으로 균형을 이룰 때 유용함.

하이퍼파라미터 튜닝
그리드 탐색과 무작위 탐색
베이지안 최적화 : 확률 모델을 활용해 하이퍼파라미터와 모델 성능의 관계를 근사함. 탐색, 활용의 균형을 유지하며 탐색하는 획득 함수(acquisition function)를 사용함.
유전 알고리즘 : 수정 또는 재조합을 거치게 됨.

DNN을 사용할 때는 은닉층 수(depth), 레이어당 뉴런(단위), 임베딩 크기, 활성화 함수, 배치 크기, 드롭아웃 등을 조정한다.

XGBoost는 트리 개수 또는 부스팅 횟수가 중요하다. 서브 샘플, 컬샘플, 학습률, L1(alpha), L2(lambda), gamma(트리 분기를 생성하기 위한 최소 손실 감소량) 등이 있다.

정규화

정규화의 목표는 모델 복잡도를 낮춰 과적합을 방지하는 것이다. 일반적으로 사용하는 L1 및 L2 정규화는 모델 가중치의 크기에 비례하는 패널티 항을 추가한다.
L1 정규화는 라쏘 정규화라고도 하며 가중치의 절댓값에 비례해 손실 함수에 패널티 항을 추가한다. 따라서 일부 가중치가 정확히 0이 되는 희소 모델이 생성되어 결과적으로 모델이 사용하는 피처 개수가 줄어든다.
L2 정규화는 릿지 정규화라고도 하며 가중치 값의 제곱에 비례해 손실 함수에 패널티 항을 추가한다. 따라서 0은 아닌 작은 가중치들이 만들어진다. L2의 경사는 가중치가 0에 가까워질 수록 0으로 감소하는 선형 함수여서 가중치 값이 작아질수록 패널티에 따른 변화량도 줄어들기 때문에 0으로 수렴하는 데 오랜 시간이 걸린다.

4.통계 지식

5.모델링 지식

로지스틱 회귀

그래디언트 XG부스팅 결정 트리

의사결정트리, 랜덤포레스트, 그래디언트 부스팅 결정 트리

심층 신경망
각 레이어의 유닛은 이전 및 다음 레이어의 유닛과 연결된다. 마지막 레이어의 출력이 모델의 예측값이다. 각 유닛은 입력의 가중 합계에 활성화 함수를 적용하고 그 결과를 다음 레이어의 유닛에 전달한다. 은닉 레이어가 많아지면 입력 데이터의 점점 더 복잡한 표현을 학습할 수 있다. 레이어가 많은 DNN을 딥러닝 모델이라고 한다.

DNN에서는 다양한 손실 함수가 사용된다. MSE, 교차 엔트로피, Log-Cosh 등이 자주 사용된다. DNN은 예측된 출력과 실제 출력 간의 차이를 최소화하기 위해 뉴런의 가중치를 반복적으로 업데이트하는 역전파 프로세스로 학습된다. 역전파는 뉴런의 가중치에 대한 손실 함수의 경사를 사용해 경사하강법의 변형 기법(확률적 경사하강법 Stochastic Gradient Descent(SGD))으로 가중치를 업데이트하는 방식으로 작동한다.

L1 또는 L2 정규화를 추가하거나 드롭아웃을 사용하거나 조기 종료를 통해 DNN을 정규화하여 과적합을 방지할 수 있다. Max-norm과 배치 정규화도 널리 사용된다. 입력과 출력 간의 복잡하고 비선형적인 관계를 학습함으로써 XGBoost와 함게 많은 작업에서 현시점 최고 성능을 달성한다.

단점은 다음과 같다. 복잡한 모델을 학습시키는 데 계산 비용이 많이 들고, 대량의 데이터가 필요하다. 복잡한 모델은 데이터셋의 크기가 작으면 과적합되기 쉽다. 또한 모델을 해석하고 이해하기가 어렵다. 실무에서는 여러 모델링 알고리즘을 결합하거나 확장할 수 있다.

profile
AI / NLP / NLU

0개의 댓글