개발자 기술 면접 준비 (2)

기남·2023년 5월 9일
0
post-thumbnail

https://dev-coco.tistory.com/158

🎈CPU vs GPU

CPU
복잡한 연산을 순차적으로 빠르게 처리한다. 다양한 연산을 수행할 수 있고, GPU를 제어하는 역할도 CPU가 한다. 비교적 적은 개수의 코어를 갖고 있다.

GPU
대량의 단순한 연산을 병렬적으로 처리한다. 대용량 데이터 처리에 특화된 연산을 수행한다. 수천 개의 작은 코어로 이루어져 있다.

🧨R-CNN모델

Object Detection task에 사용되는 모델로, 먼저 물체가 있을 만한 영역(ROI)을 찾아내고, 이를 CNN에 투입해 Feature를 추출한다. 이후 SVM 분류와 Bounding Box Regression을 이용해 모델을 학습한다.

✨Object Detection

이미지 내에 어떤 물체가 있는지 클래스를 분류하는 Classification과 해당 물체가 어떤 위치에 있는지를 표시하는 Localization task를 포함한다.

🎃Support Vector Machine(SVM)

데이터를 n차원 공간에 매핑하고 클래스 간의 거리(Margin)가 최대가 되도록 하는 경계를 찾아 분류하는 선형 분류 모델이다.

데이터가 비선형일 경우 커널을 사용해 고차원으로 매핑한 후 선형 분류를 진행할 수 있다.
ex) K(x1,x2)=(x12,2x1x2,x22)K(x_1,x_2)=(x_1^2, \sqrt2x_1x_2, x_2^2)
실제로 고차원으로 보내지 않고 내적을 사용해 같은 효과를 내는 연산을 수행할 수 있다.

이진 분류 모델이지만 one vs all 방식을 사용해 다중 클래스 분류를 할 수 있다.

🎄Pre-training & Fine-Tuning

Pre-training
모델의 가중치를 다른 데이터셋에서 학습된 가중치로 초기화하는 것

Fine-Tuning
Pre-training시킨 가중치에 부가적인 가중치를 더해 새로운 task에서 추가로 학습하는 기법
(대규모 데이터셋에서 학습한 정보를 이용할 수 있어 학습에 도움이 됨)

🎐Weight Initialization

Zero Initialization
만약 활성화함수가 tanh나 ReLU와 같이 0에서의 출력값이 0인 경우, 역전파 시에 파라미터들의 Gradient를 구할 때 이전 층 활성화 함수의 출력값이 사용되기 때문에 0의 Gradient를 가져 파라미터가 업데이트되지 않는다.

만약 활성화함수가 Sigmoid와 같이 0에서의 출력값이 0이 아닌 경우, 역전파 시에 모든 파라미터가 동일하게 업데이트되므로 여러 개의 노드로 층을 구성하는 의미가 없어진다.

Gaussian Initialization
가중치들을 평균 0, 표준편차 1로 정규화하면 Sigmoid 함수를 이용할 때 출력값이 0이나 1에 근접한 값이 나와 Gradient가 소실되는 문제가 발생한다.

이에 표준편차를 0.01로 줄이면 위 문제는 해결되어도 가중치들이 유사해져 여러 노드를 사용하는 의미가 없어진다.

Xavier Initialization
입력 노드와 출력 노드의 개수를 이용해 구한(2nin+nout\sqrt{\frac{2}{n_{in}+n_{out}}}) 표준편차로 가중치를 정규화하는 기법이다. Sigmoid, tanh를 활성화 함수로 쓸때 유용하다. 두 함수의 중간 부분이 선형인데, 이 구역에 가중치가 초기화되도록 설계되었기 때문이다.

He Initialization
입력 노드의 개수를 이용해 구한(2nin\sqrt{\frac{2}{n_{in}}}) 표준편차로 가중치를 정규화하는 기법이다. ReLU를 활성화 함수로 쓸때 유용하다. ReLU는 음수 부분의 가중치가 0이므로 Xavier Initialization의 분산이 계속에서 절반만큼 줄어드는 문제가 발생했다. 이에 2배해줌으로써 해결했다.

🧶Interrupt, Exception, Trap

Interrupt
CPU가 프로그램을 실행하는 도중에 예기치 못한 상황이 생겨 실행 중인 작업을 중단하고 다른 작업으로 전환하는 것이다.
ex) 키보드 입력, 마우스 입력, I/O interrupt

Exception
프로세스가 명령어를 실행하다 생기는 예외 상황으로, Exception이 발생하면 Exception Handler가 실행되어 처리된다.
ex) 0으로 나누기, Page Fault

Trap
특정 조건이 충족되면 프로세스가 실행 중인 작업을 중단하고 특정 코드를 실행하게 한다.
ex) 디버깅 Breakpoint trap, System Call Trap

🥽부모 프로세스, 자식 프로세스

프로세스는 실행 도중 다른 프로세스를 생성할 수 있는데, 이때 생성하는 프로세스를 부모 프로세스, 생성되는 프로세스를 자식 프로세스라고 한다.

fork()함수로 생성된 자식 프로세스는 부모 프로세스와 동일한 메모리 공간을 가지며, fork()가 호출된 시점부터 작업을 수행한다.

fork() 이후에 exec() 함수가 호출되면 메모리 공간이 새 프로그램으로 채워져 부모 프로세스와 다른 일을 수행한다.

Pipe 함수를 통해 두 프로세스가 소통할 수 있다.

프로세스 간 자원 공유

Shared Memory
운영체제에 의해 프로세스들이 특정 메모리 공간을 공유할 수 있다. 한 프로세스가 작성한 내용은 다른 프로세스에게도 보여진다. Semaphore를 이용해 관리된다.

메시지 패싱
프로세스 간에 소켓을 이용한 통신이 이루어지면 서로 메시지를 전달해 자원을 공유할 수 있다.
커널을 이용해 프로세스 간에 메시지가 전달된다.

⚽멀티 프로세스 vs 멀티 쓰레드

멀티 프로세스
각각의 프로세스가 여러 CPU에서 독립적으로 실행되는 병렬 처리 방식을 의미한다.

장점

  • 프로세스는 독립적인 구조를 갖기 때문에 안정성이 높다.
  • 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아 작업이 중단되지 않는다.

단점

  • 프로세스 간에 자원을 공유하는 것이 어려우며, 이를 위한 통신 오버헤드가 크다.
  • 하나의 CPU에서 멀티 프로세스를 구현하는 경우 Context Switching 오버헤드가 크다.

멀티 쓰레드
하나의 프로세스 내에서 여러 쓰레드가 자원을 공유하며 작업을 나누어 하는 것을 말한다.

장점

  • 쓰레드 간 자원을 주고받는 것이 쉽고 간단하다.
  • Context Switching이 빠르다.

단점

  • 자원을 공유하기 때문에 Deadlock과 같은 동기화 문제가 발생할 수 있다.
  • 하나의 쓰레드에 문제가 생기면 전체 프로세스가 영향을 받는다. (공유 자원에 동시에 접근하면 원하지 않는 방향으로 수정할 수 있다.)

ex)

단계 1단계 2
1a를 메모리에 올린다
2a를 메모리에 올린다
3a에 1을 더한다
4결과를 저장한다
5a에 1을 더한다
6결과를 저장한다

🎩DeakLock

두 쓰레드가 서로의 자원을 얻기 위해 무한정 기다리는 상황을 말한다.

🤿오버헤드

어떤 처리를 하기 위해 들어가는 간접적인 처리 시간/메모리를 뜻한다.

🎳IDE 통합 개발 환경(Integrated Development Environment)

Google Colab
브라우저에서 Python 코드를 작성하고 실행할 수 있는 IDE이다. 데이터 분석에 사용되는 Keras, matplotlib, scikit-learn, pandas와 같은 패키지가 설치되어 있으며 GPU를 무료로 이용 가능하다. 구글 드라이브, Git과 연동이 가능하다.

VS Code
마이크로 소프트가 직접 배포하는 다양한 확장 프로그램을 설치할 수 있다.
UI가 심플하고 가독성이 좋아 프로그램을 짜고 수정하는 것에 도움이 된다.
디테일한 에디터를 지원한다. (괄호의 올바른 사용, 사용하지 않는 변수 표시 등등)
코드 자동완성 기능이 있다.
Python을 개발할 때는 Python 확장 프로그램을 설치하면 Python 코드 작성, 디버깅을 이용할 수 있다. (IDE 효과)

🎾CUDA

CUDA는 NVIDIA에서 개발한 병렬 컴퓨팅 플랫폼으로, GPU를 사용하여 병렬 처리를 수행하는 데 개발자가 이용할 수 있는 도구들을 제공한다. 또한 CPU가 실행하는 호스트 코드, GPU가 실행하는 디바이스 코드 사이의 데이터 전송과 실행 제어를 관리하는 API를 제공한다.

🛶데이터 증강 라이브러리

데이터 증강 라이브러리에는 torchvision.transformsPython Albumentations가 있다. 회전, Crop, 색 변환 등을 이용해 데이터를 늘리는 효과를 낼 수 있다. 이를 통해 모델의 과적합을 방지할 수 있다.

🪀PNG, JPG 색상 비트

PNG는 각 8비트의 RGB, 그리고 알파 채널까지 포함해 32비트를 지원한다. 하지만 알파 채널은 색상에 영향을 미치지 않기 때문에 2242^{24}가지의 색상 표현이 가능하다.

JPG는 각 8비트의 RGB채널을 갖기 때문에 마찬가지로 2242^{24}가지의 색상 표현이 가능하다.

🧩가상 DOM

DOM은 HTML과 스크립팅 언어(Javascript)를 서로 이어주는 역할을 한다. 웹 브라우저에서 DOM의 변화가 있으면 HTML 코드를 연산하고 레이아웃을 다시 구성하고, 페이지를 렌더링 하는 과정에서 시간이 허비되거나 브라우저가 죽는 문제가 있다.

가상 돔은 돔의 상태를 메모리에 올려 두고, 변경사항이 있을 때만 실제 돔에 업데이트시킨다.

🧿CPU Bound vs I/O Bound

CPU Bound
CPU에 의존적인 계산이 많은 작업을 말한다. 대규모 데이터 처리, 복잡한 계산, 암호화와 같은 작업이 포함된다. 이러한 작업에는 Multi-Process 기법이 유용한데, 그 이유는 계산량이 많은 작업은 여러 개의 CPU를 이용하는 것에 직접적인 도움을 많이 받을 수 있기 때문이다.

I/O Bound
Input, Output 처리에 의존적인 작업을 말한다. CPU 성능보다는 디스크, 네트워크의 I/O 속도에영향을 받는다. 파일 읽기, 데이터베이스 쿼리, 웹 서버 요청과 같은 작업이 포함된다. 이러한 작업에는 Multi-Thread 기법이 유용한데, 그 이유는 각 Thread가 각 I/O 처리를 동시에 진행하고, 같은 메모리를 사용해 서로의 정보를 쉽게 공유할 수 있기 때문이다.

🥏웹페이지 요청 과정

  1. 브라우저에 URL을 입력한다.
  2. 브라우저가 URL에 대응하는 IP 캐시가 있는지 찾아보고, 없으면 DNS 서버에 쿼리를 보낸다.
  3. DNS 서버가 IP주소를 찾아 보낸다.
  4. 브라우저가 해당 서버로 연결을 요청하는 패킷을 보낸다.
  5. 패킷이 라우팅되어 서버에 도착한다.
  6. 클라이언트와 서버가 3-way handshake를 통해 연결된다.
  7. 브라우저가 서버에 웹페이지 GET요청을 보낸다.
  8. 서버가 그에 대한 응답을 보내고 연결을 종료한다.
  9. 브라우저가 웹페이지를 표시한다.

🎰동기/비동기 작업

동기적 작업
동기적 작업은 작업을 시작하고 해당 작업이 완료될 때까지 대기한다. 다시 말해, 요청이 완료되기 전까지 프로그램은 다른 작업을 수행하지 않는다. 예를 들어, 함수 호출은 동기적 작업이다. 함수를 호출하면 함수가 완료될 때까지 대기하고 그 후 결과를 반환한다.

비동기적 작업
비동기적(asynchronous) 작업은 작업을 시작하고 해당 작업이 완료될 때까지 대기하지 않는다. 요청을 보내면 결과를 기다리지 않고 다른 작업을 계속 수행할 수 있다. 예를 들어, 비동기적 작업을 처리하는 경우, 요청이 완료되기를 기다리는 대신 다른 작업을 수행한다. 그런 다음 결과가 도착하면 이를 처리한다. 이는 주로 I/O 작업과 같은 시간이 오래 걸리는 작업에서 유용하다.

🏒Segmentation fault

포인터 사용시 잘못된 주소 참조로 발생하는 오류이다. 배열을 벗어난 인덱스를 참조할 때 생길 수 있고, 할당되지 않은 메모리 영역이나 이미 해제된 메모리에 접근할 때 생길 수 있다. 이 경우 프로그램이 종료된다.

🥌Copy On Write(COW)

공유되는 데이터가 수정되기 전까지 해당 데이터의 복사본을 생성하지 않는 것을 말한다.

ex)
Fork()하면 부모 프로세스의 메모리를 그대로 복사하는 대신, Page Table만 복사하고 Read-Only로 설정한다. 한 프로세스가 Page에 Write하게 되면 Page Fault가 호출되어 Kernel이 그제서야 Page를 복사해 서로 다른 메모리에 올리고 수정 가능하도록 한다.

🕶캐시 Locality

최근에 사용된 데이터(Temporal Locality)와 인접한 데이터(Spatial Locality)가 또다시 참조될 가능성이 높다.

선형 자료구조 vs 비선형 자료구조

선형 자료구조
자료를 구성하는 원소를 하나씩 순차적으로 나열한 것
ex) 연결 리스트, 배열, 벡터, 스택, 큐

비선형 자료구조
하나의 자료 뒤에 여러 개의 자료가 따라올 수 있는 형태
ex) 그래프, 트리, 힙, 우선순위 큐, 맵, Set, 해시 테이블

하이퍼 파라미터 vs 매개변수

하이퍼 파라미터
사용자가 직접 정해주는 변수

매개변수
모델이 직접 학습하여 얻는 변수

profile
AI 공부하는 대학생

0개의 댓글

관련 채용 정보