제가 인터뷰를 보면서 받았던 인공지능 관련 인터뷰 질문들을 정리했습니다.
아무쪼록 이 글이 인공지능 직무를 지원하는 분께 도움이 되길 바랍니다.
이 글은 또 인터뷰에서 질문을 받게 된다면 업데이트 하겠습니다.
- Batch로 나누어서 학습하는 이유? 메모리가 무한이라면 모든 데이터를 한 batch로 만들어서 학습하는게 좋은가?
- 메모리 제한 : 대량의 데이터를 한 번에 처리하는 것은 컴퓨터의 메모리에 심각한 부담을 주기 때문에 실제로 불가능할 수 있습니다. 그래서 데이터를 더 작은 배치로 분할하면, 각 배치에 대해 별도로 작업을 수행할 수 있게 되어 메모리 부하를 줄일 수 있습니다.
- 학습 속도 : 신경망을 학습시킬 때 각 배치에 대한 손실을 계산하고 가중치를 업데이트하는데, 이는 한 번에 전체 데이터셋에 대해 수행하는 것보다 훨씬 빠릅니다. 이로 인해 더 빠른 피드백과 더 빠른 학습이 가능해집니다.
- 일반화 : 랜덤하게 섞인 배치를 사용하면 모델이 전체 데이터에 대한 패턴보다는 개별 배치에서의 패턴을 학습하는 경향이 있습니다. 이로 인해 모델이 훈련 데이터에 과적합되는 것을 방지하고 일반화 성능을 향상시킬 수 있습니다.
- Dropout이 무엇인가? Dropout의 작동 방식이 학습 시와 inference시 어떻게 다른가?
Dropout의 작동 방식은 학습 시와 추론(inference) 시에 다르게 작동합니다.
추론 시 : 모든 뉴런이 활성화되고, 각 뉴런의 출력에 Dropout 비율이 곱해져 스케일링됩니다. 이는 학습 시 무작위로 드롭아웃되는 뉴런에 대한 보정을 수행하게 됩니다. 예를 들어, 학습 과정에서 뉴런의 50%가 드롭아웃되었다면, 추론 시 각 뉴런의 출력은 0.5로 스케일링되어 최종 결과는 학습 시와 추론 시 모두 일관성을 유지하게 됩니다.
이러한 Dropout 기법은 모델의 복잡성을 줄이고 일반화 성능을 개선하는 데 매우 효과적이며, 현대 신경망에서 널리 사용되고 있습니다.
학습 시 : 각 학습 에포크에서, 일정 비율(예: 0.5)의 뉴런이 무작위로 선택되어 학습 과정에서 제외됩니다. 이는 각 뉴런이 독립적으로 학습하도록 만들어 과적합을 방지합니다. Dropout은 일종의 앙상블 학습 방법으로 볼 수 있습니다. 매번 다른 뉴런 세트로 학습하는 것은 실제로 많은 다른 모델을 훈련시키는 것과 비슷하며, 이 모델들은 모두 같은 파라미터 공간을 공유하지만 다른 부분 집합을 활성화시킵니다.
Dropout은 신경망의 과적합을 방지하는 간단한 방법으로, 학습 과정 중에 임의로 신경망의 일부 뉴런을 비활성화시킵니다. 이는 뉴런들이 특정 다른 뉴런에 의존하는 것을 방지하고, 신경망이 더욱 견고하게 만들어 모델의 일반화 성능을 향상시킵니다. - Transformer의 attention 알고리즘에 대해서 설명하라. RNN과 다르게 Transformer은 대규모 병렬 연산이 가능한 이유가 무엇인가?
- 트랜스포머에서 사용하는 주요 attention 알고리즘은 'Scaled Dot-Product Attention'과 'Multi-Head Attention'입니다.
- Scaled Dot-Product Attention: 이는 입력으로 주어진 '쿼리(query)', '키(key)', '값(value)'에 대해 계산됩니다. 특히, 쿼리와 각 키 간의 유사성을 계산하고, 이 유사성 점수를 키와 연관된 값에 적용합니다. 그런 다음, 이 점수들을 모두 합산하여 결과를 얻습니다. 이 결과는 어떤 값들이 주어진 쿼리와 가장 연관성이 높은지를 나타내며, 따라서 모델이 입력 데이터의 어떤 부분에 '집중'해야 하는지 결정할 수 있습니다.
- Multi-Head Attention: 이는 위에서 설명한 'Scaled Dot-Product Attention'을 여러 번 동시에 실행하는 것입니다. 이를 통해 모델은 입력 데이터의 다양한 표현을 학습할 수 있습니다. 각 'head'는 다른 가중치 집합을 학습하므로, 서로 다른 관점에서 데이터를 '보게' 됩니다.
트랜스포머 모델은 'Attention' 메커니즘을 기반으로 합니다. 이는 입력 데이터의 다른 부분에 대해 서로 다른 가중치를 부여하여, 모델이 어느 부분에 '집중'해야 하는지 결정하게 합니다. 트랜스포머는 시퀀스의 각 위치를 독립적으로 처리할 수 있습니다. 즉, 각 시퀀스 위치의 처리는 이전 또는 이후 위치의 처리에 의존하지 않습니다. 이는 트랜스포머 모델이 병렬 처리를 수행할 수 있게 하며, 이로 인해 대규모 데이터셋에 대한 학습이 빠르고 효율적으로 이루어질 수 있습니다. 이는 특히 GPU와 같은 하드웨어 가속기를 사용하여 대량의 병렬 연산을 수행할 때 특히 유용합니다.
- 트랜스포머에서 사용하는 주요 attention 알고리즘은 'Scaled Dot-Product Attention'과 'Multi-Head Attention'입니다.
- 딥러닝 모델에서 activation function의 기능은 무엇인가? 딥러닝 모델에서 activation function을 모두 제거하면 어떻게 될까?
- Activation function(활성화 함수)은 딥러닝 모델, 특히 인공 신경망에서 중요한 역할을 합니다. 활성화 함수의 주요 기능은 아래와 같습니다
- Activation Function의 기능:
- 비선형성 추가: 활성화 함수는 모델에 비선형성(non-linearity)를 도입하는 역할을 합니다. 이는 신경망이 복잡한 패턴을 학습하고, 선형적으로 분리 불가능한 데이터를 모델링하는 능력을 부여합니다. 비선형 활성화 함수가 없으면, 신경망은 기본적으로 선형 변환의 조합이 되어 복잡한 패턴을 학습하는 능력이 크게 제한됩니다.
- 활성화/비활성화 결정: 또한, 활성화 함수는 어떤 뉴런이 '활성화'되어 신호를 전달할지, 또는 '비활성화'되어 신호를 전달하지 않을지를 결정합니다. 이는 신경망이 중요한 특징을 학습하고 무시해야 할 덜 중요한 특징을 결정하는 데 도움이 됩니다.
활성화 함수를 모두 제거하면, 모든 계층은 기본적으로 선형 연산 (예: 행렬 곱셈과 덧셈)만 수행하게 됩니다. 이 경우, 여러 계층을 쌓는 것이 무의미해집니다. 왜냐하면 그것들은 결국 단일 선형 계층으로 축소될 수 있기 때문입니다. 따라서, 이런 네트워크는 선형적인 문제만 해결할 수 있으며, 복잡한 패턴을 학습하거나, 비선형적인 문제를 해결하는 능력은 없습니다.
- MPNN framework하에서 message function, update function, readout function의 기능
- 메시지 함수(Message Function): 메시지 함수는 한 노드에서 다른 노드로 정보를 전달하는 메시지를 계산하는 역할을 합니다. 이는 그래프의 엣지 정보를 이용하여 이루어집니다. 각 노드는 인접한 노드들로부터 메시지를 수신하며, 이 메시지는 보통 노드의 현재 상태와 연결된 엣지의 특성을 기반으로 합니다.
- 업데이트 함수(Update Function): 업데이트 함수는 노드의 상태를 업데이트하는 역할을 합니다. 메시지 함수에서 생성된 메시지를 기반으로 각 노드는 자신의 상태를 업데이트하게 됩니다. 이는 주로 비선형 활성화 함수를 통해 이루어지며, 이를 통해 그래프의 전체적인 표현을 갱신하게 됩니다.
- 읽기 함수(Readout Function): 읽기 함수는 그래프 전체에 대한 표현을 생성하는 역할을 합니다. 이는 각 노드의 최종 상태를 집계하여 그래프 전체에 대한 정보를 제공합니다. 이 함수는 그래프의 특성을 고차원 벡터로 표현하게 되며, 이는 그래프를 분류하거나 회귀 문제를 해결하는 데 사용될 수 있습니다.
Message-Passing Neural Network (MPNN)은 그래프 기반 데이터를 처리하기 위한 프레임워크로, 그래프 상의 노드와 엣지에 대한 정보를 처리하고 추론하는 데 사용됩니다. MPNN은 그래프에서 정보를 효과적으로 집계하고 전달하기 위해 메시지 함수, 업데이트 함수, 그리고 읽기(readout) 함수의 세 가지 주요 요소로 구성되어 있습니다.
- Difussion model과 score-based model에 대해 설명하라
- Diffusion Models: Diffusion 모델은 확률적인 과정으로 복잡한 데이터 분포를 모델링하는 방법을 제공합니다. 이 모델의 기본 개념은 간단한 확률 분포(예를 들어, 표준 정규 분포)에서 시작하여, 반복적으로 추가되는 노이즈를 통해 점차 복잡한 데이터 분포로 수렴하는 과정을 모델링하는 것입니다. 이 과정은 마치 브라운 운동(Brownian motion)이나 확산 과정(diffusion process)와 비슷하며, 이 때문에 이러한 모델을 Diffusion 모델이라고 부릅니다.
- Score-based Models: Score-based 모델은 데이터의 점수 함수를 학습하는 방식으로 확률적 생성 모델을 구축하는 방법을 나타냅니다. 점수 함수란, 특정 데이터 샘플이 모델이 가정하는 실제 데이터 분포에 얼마나 잘 부합하는지를 측정하는 함수를 의미합니다. 이 점수 함수를 기반으로, 모델은 점수가 높은(즉, 실제 데이터와 더 잘 부합하는) 샘플들을 생성하려고 노력합니다. 이러한 접근법은 복잡한 데이터 분포를 모델링하는 데 있어 유연성을 제공하며, 일반적으로 high-dimensional 공간에서의 복잡한 분포를 다루는데 효과적입니다.
Diffusion Models와 Score-based Models은 모두 딥러닝과 생성 모델에 사용되는 개념입니다.
- 딥러닝에서 CPU보다 GPU가 더 좋은 성능을 보여주는 이유는 무엇인가?
- 병렬 처리 능력: GPU는 원래 그래픽 처리를 위해 설계되었으며, 이로 인해 GPU는 동시에 많은 양의 작은 계산을 병렬로 처리하는 능력을 갖추게 되었습니다. 반면에 CPU는 적은 수의 코어에서 복잡한 명령어를 빠르게 처리하는 데 특화되어 있습니다. 이런 차이로 인해, 많은 양의 데이터를 동시에 처리해야 하는 딥러닝 작업에 있어서는 GPU가 CPU보다 더 우수한 성능을 발휘합니다.
- 메모리 대역폭: GPU는 대체로 CPU보다 더 높은 메모리 대역폭을 제공합니다. 이는 GPU가 동시에 더 많은 데이터를 읽고 쓸 수 있음을 의미하며, 이는 딥러닝에서 큰 장점이 됩니다. 딥러닝 모델은 대규모의 데이터셋을 활용하며, 이 때 빠른 메모리 대역폭은 모델 훈련 속도를 크게 향상시킵니다.
- 특화된 하드웨어: NVIDIA와 같은 회사들은 GPU를 딥러닝에 특화된 방식으로 설계하고 있습니다. 이들 GPU에는 딥러닝 연산을 가속화하는 데 도움이 되는 특화된 하드월 기능들이 탑재되어 있습니다.
딥러닝 알고리즘은 매우 큰 양의 데이터를 처리하고, 많은 수의 행렬 연산을 수행해야 합니다. 이러한 특성 때문에 딥러닝은 고도로 병렬 처리가 가능한 작업으로 간주되며, 이런 측면에서 GPU(Graphics Processing Unit)가 CPU(Central Processing Unit)보다 더 우수한 성능을 보여줍니다.
- 추상화란?
- "추상화(Abstraction)"는 복잡한 내부 작업 메커니즘을 숨기고, 사용자나 다른 프로그래머가 쉽게 사용할 수 있도록 인터페이스만을 제공하는 과정이나 방법을 말합니다. 코드의 복잡성을 줄이고, 재사용성을 높이며, 유지 보수를 용이하게 합니다.
추상화의 예시:
- 함수/메소드: 특정 작업을 수행하는 코드 블록을 함수나 메소드로 정의하는 것은 추상화의 기본적인 형태입니다. 사용자는 해당 함수의 내부 구현을 몰라도 이름과 인터페이스(매개변수와 반환 값)만을 이해하고 사용할 수 있습니다.
- 클래스와 객체: 객체 지향 프로그래밍에서 클래스는 데이터와 메소드를 결합하여 캡슐화합니다. 클래스를 통해 생성된 객체는 특정한 데이터 타입의 인스턴스로서, 복잡한 데이터 구조와 기능을 추상화하여 사용자가 쉽게 다룰 수 있도록 합니다.
- API(Application Programming Interface): API는 소프트웨어 컴포넌트 간의 상호작용을 위한 규약입니다. API를 사용하면, 개발자는 서비스나 시스템의 내부 구현을 몰라도 그 기능을 사용할 수 있습니다.
- 프레임워크와 라이브러리: 프레임워크와 라이브러리는 특정 기능을 구현하는 코드의 집합으로, 복잡한 기능을 쉽게 구현할 수 있도록 추상화된 인터페이스를 제공합니다. 개발자는 이를 통해 빠르게 개발을 진행할 수 있습니다.
추상화의 장점:
- 복잡성 관리: 추상화를 통해 복잡한 내부 구현을 숨기고, 사용하기 쉬운 인터페이스를 제공함으로써 전체적인 시스템의 복잡성을 관리할 수 있습니다.
- 재사용성 증가: 잘 정의된 추상화를 통해 코드의 재사용성이 증가하며, 이는 개발 시간과 비용을 절약할 수 있습니다.
- 유지보수 용이: 시스템의 특정 부분을 변경해야 할 때, 추상화를 통해 해당 부분만을 분리하여 수정할 수 있어 전체적인 유지보수가 용이해집니다.
- 확장성: 추상화된 컴포넌트는 시스템의 다른 부분에 영향을 주지 않고 독립적으로 확장이 가능합니다.
- "추상화(Abstraction)"는 복잡한 내부 작업 메커니즘을 숨기고, 사용자나 다른 프로그래머가 쉽게 사용할 수 있도록 인터페이스만을 제공하는 과정이나 방법을 말합니다. 코드의 복잡성을 줄이고, 재사용성을 높이며, 유지 보수를 용이하게 합니다.
'Deep learning' 카테고리의 다른 글
PyTorch를 사용한 신경망 구축 (0) | 2024.05.04 |
---|---|
PyTorch 기초 (데이터, 모델, 학습, 저장) (0) | 2024.05.03 |
BERT, RoBERTa, 그리고 BigBird (1) | 2024.01.21 |
Transformer 설명 (0) | 2024.01.18 |
[딥러닝 기법 모음] 딥러닝 학습에서 흔히 쓰이는 기법들 (1) | 2024.01.15 |