기록을 남기자

전체 글 186

카테고리 설명
개발,CS,PS 기록을 남기려 합니다.
  • 1.1 인터넷이란 무엇인가?위의 질문을 답하기 위한 방법으로는 다음과 같이 두 가지로 존재한다.인터넷을 구성하는 기본적인 하드웨어 & 소프트웨어 구성요소에 대한 기술 (1.1.1)분산 애플리케이션에 서비스를 제공하는 네트워킹 인프라스트럭처 관점에서의 인터넷을 기술 (1.1.2)1.1.1 구성 요소로 본 인터넷아래의 그림은 인터넷의 구성요소를 나타낸 것이다. 인터넷(Internet)Network of Network전 세계적으로 수십억 개의 컴퓨팅 장치를 연결하는 컴퓨터 네트워크 호스트(host), 종단 시스템(end system)컴퓨터 네트워크에 연결된 컴퓨팅 장치e.g., 서버 (데스크탑 PC, 리눅스 워크스테이션, 웹페이지 등), 인터넷에 연결된 모든 인터넷 ‘사물들’ (TV, 스마트 워치 등)통신 링..

  • 1. Introduction to PyTorch Pytorch : Dynamic Computation GraphTensorFlow: Define and Runcf) Define and Run: 그래프를 먼저 정의 -> 실행시점에 데이터 feedcf) Define by Run: 실행을 하면서 그래프를 생성하는 방식 Define by Run의 장점: 즉시 확인 가능, pythonic codeGPU support, Good API and Community, 사용하기 편함, TensorFlow는 production 과 scalability의 장점이 있다.PyTorch의 장점 (Numpy, AutoGrad, Function)numpy구조를 가지는 Tensor 객체로 array 표현, 자동미분 지원 DL연산 지원,..

  • 5. CNN 첫걸음 Convoultion 연산  6. RNN 첫걸음 시퀀스 데이터: 소리, 문자열, 주가 등의 데이터를 시퀀스 데이터로 분류시퀀스 데이터는 독립동등분포 가정을 잘 위배하기 때문에 순서를 바꾸거나 과거정보에 손실이 발생하면 데이터의 확률분포도 바뀌게 된다. 이전 시퀀스의 정보를 가지고 앞으로 발생할 데이터의 확률분포를 다루기 위해 조건부 확률을 이용할 수 있다. 위 조건부 확률은 과거의 모든 정보를 사용하지만 시퀀스 데이터를 분석할 때 모든 과거 정보들이 필요한 것은 아니다.고정된 길이 타우 만큼의 시퀀스를 사용하는 경우 -> 자기회귀모델 이전 직전 정보, 잠재변수 -> 고정된 길이의 모델을 사용 그렇지만 과거의 잠재변수를 어떻게 ?-> 순환신경망 RNN RNN (Recurrent Neur..

  • 3. 통계학 맛보기 강의 목표모수의 개념과 모수를 추정하는 방법으로 최대가능도 추정법을 소개정규분포, 카테고리분포에서의 예제로 최대가능도 추정법을 설명 표본분포와 표집분포, 가능도(likelihood)와 확률 등 헷갈릴 수 있는 개념들이 많이 소개되므로 각각의 정확한 의미와 차이점 최대가능도 추정법을 통해서 정답에 해당하는 확률분포와 모델이 추정하는 확률분포의 거리를 최소화함으로써 모델을 학습시킬 수 있으며, 이 원리는 딥러닝/머신러닝에서 아주 유용하게 사용되기 때문에 확실하게 이해하셨으면 좋겠습니다. 모수데이터가 특정 확률분포를 따른다고 선험적으로 가정후 그 분포를 결정하는 모수를 추정하는 방법을 모수적 방법론특정 확률분포를 가정하지 않고 데이터에 따라 모델의 구조 및 모수의 개수가 유연하게 바뀌면 비..

  • 1. 딥러닝 학습방법각 행벡터 O를 데이터 X와 가중치 행렬 W사이의 행렬곱과 절편 b벡터의 합으로 표현해보자.화살표개수 p*d => 즉 W 벡터임을 알수 있다.   학습을 하는 경우에는 softmax가 필요하고, 추론을 할때는 softmax가 굳이 필요하지 않고 one-hot벡터가 필요. 활성 함수 : 실수위에 정의된 비선형 함수로 딥러닝에서 중요한 개념시그모이드 함수나 tanh함수는 전통적으로 많이쓰이던 활성함수지만 딥러닝에선 ReLU함수를 많이 쓰고 있다.  층을 여러개 쌓는 이유층이 깊을수록 목적함수를 근사하는데 필요한 뉴런의 숫자가 훨씬 빨리 줄어들어 좀 더 효율적으로 학습이 가능층이 얇을수록 필요한 뉴런의 기하급수적으로 늘어나 넓은 신경망이 되어야 한다. 딥러닝 학습원리: 역전파 알고리즘 2...

  • 접선의 기울기를 이용해 함수의 최솟값으로 점을 이동시키는 원리를 바탕으로 경사하강법의 알고리즘과 수식을 이해해보자.변수가 벡터인 경우, 편미분을 통해 구한 그래디언트 벡터를 d-차원으로 경사하강법을 확장할 수 있다는 개념을 알아보자.  접선의 기울기를 이용해 함수의 최솟값으로 점을 이동시키는 원리를 바탕으로 경사하강법의 알고리즘과 수식을 이해해보자.변수가 벡터인 경우, 편미분을 통해 구한 그래디언트 벡터를 d-차원으로 경사하강법을 확장할 수 있다는 개념을 알아보자. 미분값을 더하면 경사상승법이라 하며 함수의 극대값의 위치를 구할때 사용한다. -> 목적함수를 최대화 할때미분값을 빼면 경사하강법이라 하며 함수의 극소값의 위치를 구할때 사용한다. -> 목적함수를 최소화 할때경사상승/경사하강 방법은 극값에 도달..

  • https://www.boostcourse.org/ai100/lecture/739176 인공지능 기초 다지기 (부스트캠프 AI Tech 7기 프리코스)부스트코스 무료 강의www.boostcourse.org강의를 보고 정리한 내용이며, 모르는 내용을 위주로 정리하려 한다. 1. 벡터와 행렬 - 1. 벡터벡터는 숫자를 원소로 가지는 리스트, 배열이다.벡터는 공간에서의 한점, 원점에서의 상대적 위치를 나타냄벡터의 연산은 합, 차, 내적, 스칼라곱 등이 가능 벡터의 노름(norm)노름(norm)은 원점에서 부터의 거리를 나타냄L1-노름 : 각 성분의 변화량의 절대값을 모두 더함L2-노름: 피타고라스 정리를 이용해 유클리드 거리를 계산함  노름의 종류에 따라 기하학적 성질이 달라지고 머신러닝에선 각 성질들이 필요..

  • BFS와 DFS는 모두 그래프를 탐색하는 방법이다. 그래프는 Node와 Node를 연결하는 Edge로 이루어진 자료구조이고 그래프를 탐색하는 것은 하나의 정점으로부터 연결된 모든 정점들을 한 번씩 차례대로 방문하는 것입니다. 깊이 우선 탐색(DFS, Depth - First Search) 그림과 같이 하나의 정점에서 끝까지 탐색해 최하단의 정점까지 방문 후, 이전 갈림길로 돌아와 선택하지 않은 정점을 방문하는 식으로 탐색한다. DFS는 스택의 자료구조를 이용하고 구체적인 방문 과정은 다음과 같다. 탐색 첫 노드를 스택에 삽입후 방문 처리 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접노드를 스택에 넣고 방문 처리, 인접 노드가 없다면 스택에서 최상단 노드를 꺼내기 2를 수행할 수 없을때까..

작성일
2024. 7. 9. 19:47
작성자
ssun_bear
반응형

1.1 인터넷이란 무엇인가?

위의 질문을 답하기 위한 방법으로는 다음과 같이 두 가지로 존재한다.

  1. 인터넷을 구성하는 기본적인 하드웨어 & 소프트웨어 구성요소에 대한 기술 (1.1.1)
  2. 분산 애플리케이션에 서비스를 제공하는 네트워킹 인프라스트럭처 관점에서의 인터넷을 기술 (1.1.2)



1.1.1 구성 요소로 본 인터넷

아래의 그림은 인터넷의 구성요소를 나타낸 것이다.

 

인터넷(Internet)

  • Network of Network
  • 전 세계적으로 수십억 개의 컴퓨팅 장치를 연결하는 컴퓨터 네트워크

 

호스트(host), 종단 시스템(end system)

  • 컴퓨터 네트워크에 연결된 컴퓨팅 장치
  • e.g., 서버 (데스크탑 PC, 리눅스 워크스테이션, 웹페이지 등), 인터넷에 연결된 모든 인터넷 ‘사물들’ (TV, 스마트 워치 등)
  • 통신 링크(communication link)와 패킷 스위치(packet switch)의 네트워크로 연결된다.

 

통신 링크(communication link)

  • 다양한 전송률(transmission rate, 링크 대역폭 또는 bandwidth)을 이용해 패킷(packet = 데이터)을 전송한다.
  • 전송률의 단위 : bps(bits per second, 초당 비트 수)
  • 동축케이블, 구리선, 광케이블, 라디오 스펙트럼을 포함한 다양한 물리 매체로 구성된다.

 

패킷(packet)

  • 송신 종단 시스템에서 수신 종단 시스템(목적지)으로 보내진다.
  • 송신 종단 시스템이 보내고자 하는 데이터를 세그먼트(segment)로 나누고, 각 세그먼트에 헤더(header)를 부착하여 수신 종단 시스템으로 전송한다.
  • 패킷은 목적지에서 원래의 데이터로 다시 조립된다.

 

패킷 교환기, 패킷 스위치(packet switch)

  • 입력 통신 링크 중 하나
  • 도착하는 패킷을 받아서 출력 통신 링크의 하나로 그 패킷을 전달한다. (최종 목적지 방향으로 패킷을 전달)
  • 대표적인 두 종류
    • 링크 계층 스위치(link-layer switch) : 보통 접속 네트워크에서 사용
    • 라우터(router) : 보통 네트워크 코어에서 사용

 

경로(route, path)

  • 패킷이 송신 종단 시스템에서 보내진 후 수신 종단 시스템에 도달하는 동안 거쳐온 일련의 통신 링크와 패킷 스위치를 말한다.
  • 패킷은 컴퓨터 네트워크를 통한 경로를 따른다.

 

ISP(Internet Service Provider)

  • 패킷 스위치와 통신 링크로 이루어진 네트워크
  • 종단 시스템에게 다양한 네트워크 접속을 제공한다. (가정용 초고속 접속, 고속 LAN 접속, 이동 무선 접속 등)
  • CP(content provider)에게 인터넷 접속을 제공 → 웹 사이트나 비디오 서버를 인터넷에 직접 연결할 수 있게 된다.
  • ISP들의 상호 연결💡 인터넷은 종단 시스템을 서로 연결하는 것이므로 종단 시스템에 접속을 제공하는 ISP들도 서로 연결되어야만 한다.
    • 하위 계층 ISP는 국가 & 국제 상위 계층 ISP를 통해 서로 연결한다. - 상위 계층 ISP들은 서로 직접 연결된다.
    • 각 ISP 네트워크는 따로 관리되고, IP 프로토콜을 수행하며, 네이밍(naming)과 주소배정 방식을 따른다.

 

프로토콜(protocol)

  • 인터넷에서 정보의 송수신을 제어한다.
  • 가장 중요한 프로토콜 둘을 통칭하여 TCP/IP라고 한다.
    • TCP(Transmission Control Protocol)
    • IP(Internet Protocol) : 라우터와 종단 시스템 사이에서 송수신되는 패킷 포맷을 기술한다.

 

Standards

  • IETF(Internet Engineering Task Force)
    • 국제 인터넷 표준화 기구
    • RFC(Requests for Comment) : IETF 표준 문서
    • TCP, IP, HTTP, SMTP 같은 프로토콜을 정의
  • IEEE 802 LAN 표준위원회
    • 이더넷과 무선 와이파이 표준을 기술



1.1.2 서비스 측면에서 본 인터넷

인터넷은 애플리케이션에 서비스를 제공하는 Infrastructure

  • 애플리케이션은 서로 데이터를 교환하는 많은 종단 시스템을 포함하고 있기 때문에 분산 애플리케이션(distributed application)이라고 부른다.
  • 인터넷 애플리케이션은 종단 시스템에서 수행되며, 네트워크 코어에 있는 패킷 교환기에서 수행되지 않는다.

💡 패킷 교환기는 종단 시스템 간의 데이터 교환을 쉽게 해주지만, 데이터의 시작과 끝인 애플리케이션에는 관심을 갖지 않는다.

 

소켓 인터페이스(socket interface)

Q.
한 종단 시스템에서 수행되는 애플리케이션이 다른 종단 시스템에서 수행되고 있는 프로그램으로 데이터를 보내도록 하기 위해서는 인터넷에 어떻게 지시할 것인가?

한 종단 시스템에서 수행되는 프로그램이 다른 종단 시스템에서 수행되는 특정 목적지 프로그램으로 데이터를 전달하도록

어떻게 인터넷 인프라스트럭처에 요구하는지를 명시한 것을 소켓 인터페이스라고 한다.

 

→ 인터넷에 접속된 종단 시스템들은 소켓 인터페이스를 모두 가지고 있다.

💡 소켓 인터페이스는 송신 프로그램이 따라야 하는 규칙의 집합이며, 인터넷은 이 규칙에 따라 데이터를 목적지 프로그램으로 전달하게 된다.



1.1.3 프로토콜이란 무엇인가?

둘 이상의 통신 개체(entity)가 어떤 일을 함께 수행하려면 이들이 다같이 인식하는 프로토콜 즉, 통신 규약이 필요하다.

아래의 그림은 사람 프로토콜과 컴퓨터 네트워크 프로토콜을 나타낸 것이다.

  • 메세지의 송수신과 메시지를 송수신할 때 취하는 행동은 프로토콜의 중심에 있다.
  • 따라서 하나가 다른 프로토콜을 수행한다면 그 프로토콜은 다른 이들과 상호작용할 수 없으며, 원하는 작업을 수행할 수 없다.

 

네트워크 프로토콜

  • 통신하는 둘 이상의 원격 개체가 포함된 인터넷에서의 모든 활동은 프로토콜이 제어한다.
  • e.g.,
    • 혼잡 제어(congestion-control) 프로토콜 : 종단 시스템에 존재하며, 송수신자 간에 전송되는 패킷 전송률을 조절한다.
    • 라우터에서의 프로토콜 : 출발지(source)에서 목적지(destination)까지의 패킷 경로를 설정한다.

💡 프로토콜은 둘 이상의 통신 개체 간에 교환되는 메시지 포맷과 순서뿐만 아니라, 메시지의 송수신과 다른 이벤트에 따른 행동들을 정의한다.


1.2 접속 네트워크

컴퓨터 네트워크(특히 인터넷)의 구성요소에 대하여 자세히 살펴보자.

 

호스트(host), 종단 시스템(end system)

  • 인터넷에 연결되는 컴퓨터와 그 밖의 장치들
  • 인터넷의 가장 자리를 차지하고 있기 때문에 ‘종단’ 시스템이라고 부른다.
  • 종단 시스템은 애플리케이션을 수행하므로 호스트라고도 부르며, 호스트는 클라이언트(client)와 서버(server)로 구분된다.

 

아래는 종단 시스템의 상호작용을 나타낸 그림이다.



1.2.1 접속 네트워크

접속 네트워크(access network)

종단 시스템을 먼 거리에 위치한 다른 종단 시스템까지의 경로 상에 있는 첫 번째 라우터 즉, 가장 자리 라우터(edge router)에 연결하는 네트워크를 말한다.

아래 그림에서의 굵은 선들은 여러 종류의 접속 네트워크들을 나타낸 것이다.



네트워크 접속 기술들에 대하여 차례대로 알아보자.

  • 가정 접속 : DSL, 케이블, FTTH, 5G 고정 무선 기술
  • 기업(그리고 가정) 접속 : 이더넷, 와이파이
  • 광역 무선 접속 : 3G, LTE 4G, 5G

 

가정 접속

  • 오늘날(2020년) 가장 널리 보급된 광대역 가정 접속 유형들
    • DSL : 지역 전화 회사(telco)의 기존 로컬 전화 인프라스트럭처를 이용
    • 케이블 : 케이블 TV 회사의 기존 케이블 TV 인프라스트럭처를 이용
  • FTTH : 위의 접속 유형들보다 빠른 속도를 제공하는 미래 기술

 

DSL(Digital Subscriber Line) 인터넷 접속

가정은 유선 로컬 전화 서비스를 제공하는 같은 지역 전화 회사(telco)로부터 DSL 인터넷 접속 서비스를 받는다.

 

DSL 모뎀



가정의 DSL 모뎀은 텔코의 지역 중앙국(Central Office, CO)에 위치한 DSLAM(Digital Subscriber Line Access Multiplexer)과 데이터를 교환하기 위해
기존 전화 회선을 이용한다.

  1. 가정의 DSL 모뎀은 수신한 디지털 데이터를 전화선을 통해 CO로 전송하기 위해, 해당 데이터를 고주파 신호로 변환한다.
  2. 여러 가정으로부터의 아날로그 신호는 DSLAM에서 디지털 포맷으로 다시 변환된다.

 

주파수 분할 다중화(Frequency-Division Multiplexing, FDM)

이는 1.3.2절에서 자세히 다룰 예정이다.

가정 전화 회선은 데이터와 전통적인 전화 신호를 동시에 전달하며, 이들은 다른 주파수 대역에서 인코딩된다.

 

주파수 분할 다중화를 통해 단일 DSL 링크가 3개의 분리된 링크인 것처럼 보인다.

이를 통해서 하나의 전화 회선과 인터넷 연결이 동시에 DSL 링크를 공유할 수 있게 된다.

  • 고속 다운스트림 채널 : 50 kHz ~ 1 MHz 대역
  • 중간 속도의 업스트림 채널 : 40 ~ 50 kHz 대역
  • 일반적인 양방향 전화 채널 : 0 ~ 4 kHZ 대역

 

스플리터 (splitter)

  • 가정 쪽에 존재한다.
  • 역할
    1. 가정에 도착하는 데이터와 전화 신호를 분리
    2. 데이터 신호를 DSL 모뎀으로 전송

 

DSLAM(Digital Subscriber Line Access Multiplexer)

  • 수백 ~ 수천 개의 가정들이 DSLAM에 연결된다.
  • 역할
    1. 데이터와 전화 신호를 분리
    2. 데이터를 인터넷으로 송신

 

DSL 표준

  • DSL 표준은 여러 전송률을 정의하며, 이 전송률에는 업스트림과 다운스트림을 포함된다. (다운스트림 채널이 업스트림 채널보다 빠른 전송률이 할당됨)
    • 업스트림 속도 : 3.5 Mbps, 16 Mbps
    • 다운스트림 속도 : 24 Mbps, 52 Mbps

 

  • 최신 표준 : 업스트림과 다운스트림을 결합한 1 Gbps 속도를 정의 (ITU 2014)
    • 다운스트림과 업스트림의 속도가 다르기 때문에 이 접속 방식을 비대칭(asymmetric)이라고 한다.

 

케이블 인터넷 접속, HFC(Hybrid Fiber Coax)

가정은 케이블 TV 서비스를 제공하는 같은 회사로부터 인터넷 접속 서비스를 받는다.

광케이블은 케이블 헤드엔드를 이웃 레벨 정션(junction)에 연결하며, 이로부터 가정들에 도달하는 데에는 전통적인 동축케이블이 사용된다.



헤드엔드(head-end)

  • (유선 TV의) 전파 (조정) 중계소, 중계국 / 주전송장치(분배센터)
  • 각 데이터 국으로부터 수신된 신호를 많은 세대가 시청할 수 있도록 신호를 가공, 증폭한 다음 분배해주는 시설
  • 유선 TV 방송을 위해 전파를 증폭, 조정, 변환, 투입차단 또는 혼합하여 선로로 송출하는 장치들과 신호를 간선 케이블로 송출하는 모든 설비를 말한다.

 

케이블 모뎀

  • 케이블 인터넷 접속을 위한 모뎀
  • 이더넷 포트를 통해 가정 PC에 연결된다.
  • 케이블 헤드엔드에서 CMTS(Cable Modem Termination System)가 존재
  • 이는 HFC 네트워크를 다운스트림과 업스트림 채널 2개로 나눈다. (DSL과 똑같음!)
    • 비대칭 접속
    • 다운스트림 채널이 업스트림 채널보다 빠른 전송률이 할당된다.

 

CMTS(Cable Modem Termination System)

  • 많은 다운스트림 가정에 있는 케이블 모뎀으로부터 송신된 아날로그 신호를 다시 디지털 포맷으로 변환하는 역할
  • 즉, 이는 DSL 네트워크의 DSLAM와 유사한 기능을 한다.

 

케이블 인터넷은 공유 방송 매체 ⭐️

  1. 헤드엔드가 보낸 모든 패킷은 / 모든 링크의 다운스트림 채널을 통해 / 모든 가정으로 전달된다.
  2. 가정에서 보낸 모든 패킷은 / 업스트림 채널을 통해 / 헤드엔드로 전달한다.

 

이에 다음과 같은 상황이 발생한다.

  • 여러 사용자가 다운스트림 채널에서 다른 비디오 파일을 동시에 수신하고 있다면,
    각 사용자가 비디오 파일을 수신하는 실제 수신율은 다운스트림 전송률보다 작아진다.
  • 몇 명만 접속 중이며 모두가 웹을 탐색 중이라면, 각 사용자는 전체 다운스트림 전송률로 웹 페이지를 수신할 수도 있다.

업스트림 채널도 공유가 되기 때문에, 분산 다중 접속 프로토콜은 전송을 조정하고 충돌을 피하기 위해 필요하다.

 

FTTH(Fiber to the Home) 인터넷 접속

  • 지역 중앙국(Central Office, CO)로부터 가정까지 직접 광섬유 경로를 제공한다.
  • 잠재적으로 Gbps의 인터넷 접속 속도를 제공할 수 있다.
  • 광신호 분배 기술 : CO로부터 가정까지 광신호를 분해하는 기술들을 말한다.

 

다이렉트 광섬유(direct fiber)

  • 가장 간단한 광신호 분배 네트워크
  • CO에서 각 가정으로 하나의 광섬유를 제공

 

AON(Active Optical Network)과 PON(Passive Optical Network)

스플리팅을 수행하는 두 가지 경쟁적인 광신호 분배 네트워크 구조들을 말한다.

스플리팅(splitting) : 일반적으로 CO에서 시작되는 각 광섬유는 여러 가정이 공유하기 때문에,
가정에 가까운 곳까지 하나의 광섬유로 온 다음 고객별 광섬유로 분리하는 것

  • AON : 근본적인 교환(switched) 이더넷
  • PON : 아래 그림 참고 (PON 분배 구조를 이용하는 FTTH 인터넷 접속)이처럼 각 가정에서의 사용자는 홈 라우터를 ONT에 연결하고, 그를 통해 인터넷에 접속한다.

    인터넷 접속 절차는 아래와 같이 정리할 수 있다.
    1. 각 가정은 ONT(Optical Network Terminator)를 가지고 있으며, 이는 지정된 광섬유로 이웃 스플리터에 연결된다.
    2. 스플리터(Optical Splitter)는 여러 가정을 하나의 공유 광섬유로 결합, 이를 텔코의 CO에 있는 OLT(Optical Line Terminator)에 연결한다.
    3. OLT는 광신호와 전기 신호 간의 변환을 제공, 이는 텔코 라우터를 통해 인터넷에 연결된다.


 

5G 고정 무선(5G Fixed Wireless, 5G-FW) 기술

  • 빔포밍(beam-forming) 기술을 이용하여 서비스 제공가의 기지국에서 가정 내의 모뎀으로 데이터를 무선으로 전송한다.
  • 와이파이(WiFi) 무선 라우터가 케이블 또는 DSL 모뎀에 연결되어 있듯, 5G-FW에서도 와이파이 무선 라우터가 모뎀에 연결되어 있다.
  • 5G 셀룰러(cellular) 네트워크 → 7장에서 설명

 

기업(그리고 가정) 접속

LAN(Local Area Network)

  • 종단 시스템을 가장자리 라우터에 연결하는 데 사용된다.
  • 여러 유형의 LAN 기술 중, 이더넷 기술이 기업, 대학, 홈 네트워크에서 가장 널리 사용되는 접속 기술

아래는 전형적인 홈 네트워크를 나타낸 그림이다.



이더넷(Ethernet)

  • 이더넷 스위치에 연결하기 위해 꼬임쌍선을 이용 (꼬임 쌍선은 1.2.2절에서 설명)
  • 이더넷 스위치 혹은 상호연결된 스위치들의 네트워크는 다시 더 큰 인터넷으로 연결된다.

 

무선 랜(wireless LAN) 환경

점차 사람들은 인터넷을 ‘사물(스마트폰, 태블릿 등)’에서 무선으로 접속하고 있다.

  • 무선 랜 환경에서 무선 사용자들은 기업 네트워크에 연결된 AP(Access Point)로 패킷을 송•수신
  • AP는 유선 네트워크에 다시 연결된다.
  • 와이파이(WiFi) : IEEE 802.11 기술에 기반한 무선 랜 접속

 

광역 무선 접속

  • 무선 인프라스트럭처를 채택 (이동 전화망 사업자들이 운영하는 기지국을 통해 패킷을 송수신하는 데 사용하는 것과 같은 것임)
  • 수십 미터 반경 내에 있어야 하는 와이파이와 달리, 사용자는 기지국의 수십 킬로미터 반경 내에 있으면 된다.



1.2.2 물리 매체

인터넷에서 공통적으로 사용하는 물리 매체들과 그 밖의 매체들에 대하여 살펴보자.

 

물리 매체(physical media)

물리 매체를 정의하기 위해서는 비트에 대해 먼저 알아야 한다.

 

한 종단 시스템에서 여러 링크와 라우터를 거쳐 다른 종단 시스템으로 한 비트가 전달되는 상황을 생각해보자.
  • 이 비트는 여러 라우터를 거치게 된다. (첫 번째 라우터 : 비트를 수신 & 전송 → 두 번째 라우터 : 비트를 수신 & 전송 → 세 번째 라우터 : … )
  • 즉, 비트는 출발지에서 목적지로 전달될 때 여러 번 걸쳐 전송되며, 일련의 송신기-수신기 쌍을 거친다.

 

비트는 물리 매체(physical media)상에 전자파나 광 펄스를 전파하여 전송한다.

  • 물리 매체는 여러 형태이며, 경로상의 각 송신기-수신기 쌍에 대해 같은 유형일 필요는 없다.
  • e.g., 꼬임쌍선, 동축케이블, 다중모드 광섬유 케이블, 지상파와 위성파 등
  • 두 가지 종류
    • 유도 매체(guided media) : 꼬임쌍선, 동축케이블, 광섬유 케이블과 같은 견고한 매체를 따라 파형을 유도
    • 비유도 매체(unguided media) : 무선 랜 혹은 디지털 위성 채널처럼 야외 공간으로 파형을 전파

 

꼬임쌍선

  • 가장 싸고 가장 많이 이용하는 전송 매체 (전화기에서 전화국 스위치까지 유선 연결의 99% 이상이 이를 이용)
  • 구성
    • 2개의 절연 구리선, 각각은 약 1mm 굵기로 규칙적인 나선 형태로 배열된다.
    • 이웃하는 쌍들 간에 전기 간섭을 줄이기 위해 선들이 꼬여 있는 것이며, 이러한 한 쌍의 선이 하나의 통신 링크를 구성한다.
  • 데이터 전송률 : 전송선의 두께, 송신기와 수신기 사이의 거리에 따라 다르다.
  • 사용 : UTP(Unshielded Twisted Pair) - 빌딩의 컴퓨터 네트워크, LAN에서 가장 많이 이용하는 매체

 

동축케이블

  • 구조 : 꼬임쌍선처럼 2개의 구리선으로 되어 있으나, 두 구리선이 평행하지 않고 동심원 형태를 이룬다.
  • 데이터 전송률 : 동심원 형태의 구조와 특수 절연 및 차폐를 가지고 있어 꼬임쌍선보다 더 높은 데이터 전송률을 얻을 수 있다.
  • 사용 : 케이블 TV 시스템
  • 특징
    • 유도 공유 매체(shared medium)으로 사용할 수 있다.
    • 여러 종단 시스템은 케이블에 직접 연결할 수 있고, 모든 종단 시스템은 다른 종단 시스템이 전송하는 모든 것을 수신한다.

 

광섬유

  • 비트를 나타내는 빛의 파동을 전하는 가늘고 유연한 매체
  • 초당 10~100기가비트에 이르는 높은 비트율을 지원한다.
  • 광 장비는 고가이므로 근거리 전송(LAN, 가정)에는 이용하기 어렵다.
  • 특징
    • 전자기성 간섭에 영향을 받지 않는다.
    • 100 km까지는 신호 감쇠 현상이 매우 적다.
    • 태핑(tapping, 도청)하기가 어렵다.
  • 사용 : 해저 링크, 광역 전화 네트워크

 

지상 라디오 채널

  • 전자기 스펙트럼으로 신호를 전달한다.
  • 특징
    • 물리 선로를 설치할 필요가 없다.
    • 벽을 관통할 수 있다.
    • 이동 사용자에게 연결성을 제공하며, 먼 거리까지 신호 전달이 가능하다
    • 전파 환경과 신호가 전달되는 거리에 많은 영향을 받는다.
      • 주변 환경을 결정하는 요소
        • 경로손실(path loss)
        • 섀도 페이딩(shadow fading) : 신호가 먼 거리를 지나감에 따라 / 방해 물질을 돌아가거나 통과함에 따라 신호 강도가 약해지는 현상
        • 다중경로 페이딩 : 간섭 물체의 신호 반사 때문에 발생
        • 간섭 : 다른 라디오 채널이나 전자기 신호 때문에 발생
  • 크게 3개의 그룹으로 분류
    • 1~2 m의 매우 짧은 거리에서 동작하는 채널 (무선 헤드셋, 키보드 등)
    • 로컬 라디오 채널 : 십~수백 미터에 걸쳐 근거리 네트워크로 동작하는 채널 (무선 랜 기술)
    • 광역 라디오 채널 : 수십 킬로미터에 걸쳐 광역에서 작동하는 채널 (셀룰러 접속 기술)

 

위성 라디오 채널

  • 지상 스테이션이라는 둘 이상의 지상 기반 마이크로파 송신기/수신기를 연결한다.
  • 과정
    1. 한 주파수 대역으로 전송 신호를 수신
    2. 리피터(repeater)를 통해 그 신호를 재생
    3. 그 신호를 다른 주파수 대역으로 전송
  • 전송률 : 초당 기가비트
  • 두 가지 종류
    • 정지 위성(geostationary satellite) : 지상 36,000 km에 쏘아올려져 일정 위치에 영원히 머무름
    • 저궤도 위성(low-earth orbiting(LEO) satellite) : 지구를 공전하며 지상국뿐만 아니라 서로 통신할 수 있음
      → 미래의 인터넷 접속에 이용될 수도?

 

반응형
작성일
2024. 7. 5. 18:09
작성자
ssun_bear
반응형

1. Introduction to PyTorch

 

Pytorch : Dynamic Computation Graph

TensorFlow: Define and Run

cf) Define and Run: 그래프를 먼저 정의 -> 실행시점에 데이터 feed

cf) Define by Run: 실행을 하면서 그래프를 생성하는 방식

 

Define by Run의 장점: 즉시 확인 가능, pythonic code

GPU support, Good API and Community, 사용하기 편함,

 

TensorFlow는 production 과 scalability의 장점이 있다.

PyTorch의 장점 (Numpy, AutoGrad, Function)

numpy구조를 가지는 Tensor 객체로 array 표현, 자동미분 지원 DL연산 지원, 다양한 형태의 DL을 지원하는 함수와 모델 지원

 


2. PyTorch Basics

 

PyTorch Operations

"numpy + AutoGrad"

a는 copy가 아님, b는 copy -> 주로 view를 쓰면됨

 

  • view는 오직 contiguous한 tensor에만 적용할 수 있으며, reshape은 이러한 제약이 없다.
  • view는 원래 tensor와 메모리를 공유하며, reshape도 가능한 경우에는 원래 tensor와 메모리를 공유한다.
  •  

 

 


3. PyTorch 프로젝트 구조 이해하기

 

 

upyter Notebook으로 코드를 관리할 때 일반적으로 발생할 수 있는 어려움

 

  • 쉬운 코드 재현이 어려울 수 있다.
  • 실행 순서가 꼬일 가능성이 존재한다.

다음 중 PyTorch project template을 사용하여 코드를 관리할 때의 특징에 대해 옳은 것을 모두 고르시오.

 


  • 프로젝트의 여러 모듈(module)들이 분리 돼 있어 코드를 재사용하기에 편리하다.
  • 쉬운 코드 재현이 가능하다

다음 중 매직 메서드 `__getitem__` 에 대한 설명 중 옳지 않은 것을 고르시오.

        __getitem__`에 전달받는 인덱스는 항상 정수여야 한다.

  •  

 

 

반응형
작성일
2024. 7. 5. 17:19
작성자
ssun_bear
반응형

5. CNN 첫걸음

 

Convoultion 연산

 

 


6. RNN 첫걸음

 

시퀀스 데이터

: 소리, 문자열, 주가 등의 데이터를 시퀀스 데이터로 분류

시퀀스 데이터는 독립동등분포 가정을 잘 위배하기 때문에 순서를 바꾸거나 과거정보에 손실이 발생하면 데이터의 확률분포도 바뀌게 된다.

 

이전 시퀀스의 정보를 가지고 앞으로 발생할 데이터의 확률분포를 다루기 위해 조건부 확률을 이용할 수 있다.

 

위 조건부 확률은 과거의 모든 정보를 사용하지만 시퀀스 데이터를 분석할 때 모든 과거 정보들이 필요한 것은 아니다.

고정된 길이 타우 만큼의 시퀀스를 사용하는 경우 -> 자기회귀모델

 

이전 직전 정보, 잠재변수 -> 고정된 길이의 모델을 사용

 

그렇지만 과거의 잠재변수를 어떻게 ?

-> 순환신경망 RNN

 

RNN (Recurrent Neural Network) 이해하기

가장 기본적인 RNN모델은 MLP와 유사한 모양

W(2), Wx(1), Wh(1)은 t에 따라서 변하는 행렬이 아니다. 이 가중치 행렬은 동일한 값을 t에따라 가진다.

 

-> BPTT를 통한 역전파 알고리즘의 계산이 불안정해지므로 길이를 끊는 것이 필요

-> truncated BPTT

 

반응형
작성일
2024. 7. 5. 16:46
작성자
ssun_bear
반응형

3. 통계학 맛보기

 

강의 목표

모수의 개념과 모수를 추정하는 방법으로 최대가능도 추정법을 소개

정규분포, 카테고리분포에서의 예제로 최대가능도 추정법을 설명

 

표본분포와 표집분포, 가능도(likelihood)와 확률 등 헷갈릴 수 있는 개념들이 많이 소개되므로 각각의 정확한 의미와 차이점

 

최대가능도 추정법을 통해서 정답에 해당하는 확률분포와 모델이 추정하는 확률분포의 거리를 최소화함으로써 모델을 학습시킬 수 있으며, 이 원리는 딥러닝/머신러닝에서 아주 유용하게 사용되기 때문에 확실하게 이해하셨으면 좋겠습니다.

 

모수

데이터가 특정 확률분포를 따른다고 선험적으로 가정후 그 분포를 결정하는 모수를 추정하는 방법을 모수적 방법론

특정 확률분포를 가정하지 않고 데이터에 따라 모델의 구조 및 모수의 개수가 유연하게 바뀌면 비모수 방법론

 

 

표본 평균, 표본 분산

 

최대가능도 추정법

표본평균이나 표본분산은 중요한 통계량이지만 확률분포마다 사용하는 모수가 다르므로 적절한 통계량이 달라지게 된다.

이론적으로 가장 가능성이 높은 모수를 추정하는 방법 중 하나는 최대가능도 추정법(MLE)이다.

 

 

왜 로그가능도를 사용하는지?

미분 연산을 사용하여 로그가능도를 사용하면 연산량이 O(n^2)에서 O(n)으로 줄여줌

대게의 손실함수의 경우 경사하강법을 사용하므로 음의 로그가능도를 최적화하게 됨

 

최대가능도 추정법 예제: 정규분포

최대가능도 추정법 예제: 카테

고리 분포

딥러닝에서 최대가능도 추정법

 

확률분포의 거리를 구해보자

데이터 공간에 두개의 확률분포 P(x), Q(x)가 있을 경우 두 확률분포 사이의 거리를 계산할 때 다음과 같은 함수들을 이용한다

- 총변동거리

- 쿨백-라이블러 발산

- 바슈타인 거리

 

쿨백-라이블러 발산(KL Divergence)

 

Further Question

 

1. 확률과 가능도의 차이는 무엇일까요? (개념적인 차이, 수식에서의 차이, 확률밀도함수에서의 차이)
2. 확률 대신 가능도를 사용하였을 때의 이점은 어떤 것이 있을까요?

3. 다음의 code snippet은 어떤 확률분포를 나타내는 것일까요? 해당 확률분포에서 변수 theta가 의미할 수 있는 것은 무엇이 있을까요?

import numpy as np
import matplotlib.pyplot as plt
theta = np.arange(0, 1, 0.001)
p = theta ** 3 * (1 - theta) ** 7
plt.plot(theta, p)
plt.show()

 


4. 베이즈 통계학 맛보기


조건부확률에서 이어지는 개념인 베이즈 정리와 인과관계 추론에 대해 설명

 

조건부 확률

 

 

 

조건부 확률은 유용한 통계적 해석을 제공하지만 인과관계를 추론할 때 함부로 사용해서는 안된다.

인과관계는 데이터 분포의 변화에 강건한 예측 모형을 만들 때 필요하다.

인과관계를 알아내기 위해서는 중첩요인의 효과를 제거하고 원인에 해당하는 변수만의 인과관계를 계산해야한다.

 

 

중첩효과를 제거한것과 조건부확률로 계산한 치료효과가 정반대의 결과가 나오게 되므로 인과관계추론을 임의로 하면 안된다.

반응형
작성일
2024. 7. 5. 15:43
작성자
ssun_bear
반응형

1. 딥러닝 학습방법

각 행벡터 O를 데이터 X와 가중치 행렬 W사이의 행렬곱과 절편 b벡터의 합으로 표현해보자.

화살표개수 p*d => 즉 W 벡터임을 알수 있다. 

 

 

학습을 하는 경우에는 softmax가 필요하고, 추론을 할때는 softmax가 굳이 필요하지 않고 one-hot벡터가 필요.

 

활성 함수 : 실수위에 정의된 비선형 함수로 딥러닝에서 중요한 개념

시그모이드 함수나 tanh함수는 전통적으로 많이쓰이던 활성함수지만 딥러닝에선 ReLU함수를 많이 쓰고 있다.

 

 

층을 여러개 쌓는 이유

층이 깊을수록 목적함수를 근사하는데 필요한 뉴런의 숫자가 훨씬 빨리 줄어들어 좀 더 효율적으로 학습이 가능

층이 얇을수록 필요한 뉴런의 기하급수적으로 늘어나 넓은 신경망이 되어야 한다.

 

딥러닝 학습원리: 역전파 알고리즘

 


2. 확률론 맛보기

 

딥러닝에서 확률론이 필요한 이유?

딥러닝은 확률론기반의 기계학습이론에 바탕을 두고 있음

기계학습에서 사용되는 손실함수(loss function)들의 작동원리는 데이터 공간을 통계적으로 해석 유도

회귀분석에서 손실함수로 사용되는 L2-노름은 예측오차의 분산을 가장 최소화하는 방향으로 학습 유도

분류문제에서 사용되는 교차 엔트로피(cross-entropy)는 모델 예측의 불확실성을 최소화 하는 방향으로학습 유도

분산 및 불확실성을 최소화하기 위해서는 측정하는 방법을 알아야 합니다.

 

이산확률변수 vs. 연속확률변수

확률분포D에 따라 이산형과 연속형 확률변수로 구분

이산형 확률변수는 확률변수가 가질 수 있는 경우의 수를 모두 고려하여 확률을 더해서 모델링

연속형 확률 변수는 데이터 공간에 정의된 확률변수의 밀도 위에서의 적분을 통해 모델링한다.

(밀도는 누적확률분포의 변화율을 모델링하며 확률로 해석하면 안된다)

 

기대값

연속확률분포에서는 밀도함수를, 이산확률분포에서는 질량함수를 곱해준다.

 

몬테카를로 샘플링

기계학습의 많은 문제들은 확률분포를 명시적으로 모를때가 대부분이다.

확률분포를 모를때 데이터를 이용하여 기대값을 계산하려면 몬테카를로 샘플링 방법을 사용해야한다.


반응형
작성일
2024. 7. 5. 14:29
작성자
ssun_bear
반응형

접선의 기울기를 이용해 함수의 최솟값으로 점을 이동시키는 원리를 바탕으로 경사하강법의 알고리즘과 수식을 이해해보자.

변수가 벡터인 경우, 편미분을 통해 구한 그래디언트 벡터를 d-차원으로 경사하강법을 확장할 수 있다는 개념을 알아보자.

 

 

접선의 기울기를 이용해 함수의 최솟값으로 점을 이동시키는 원리를 바탕으로 경사하강법의 알고리즘과 수식을 이해해보자.

변수가 벡터인 경우, 편미분을 통해 구한 그래디언트 벡터를 d-차원으로 경사하강법을 확장할 수 있다는 개념을 알아보자.

 

미분값을 더하면 경사상승법이라 하며 함수의 극대값의 위치를 구할때 사용한다. -> 목적함수를 최대화 할때

미분값을 빼면 경사하강법이라 하며 함수의 극소값의 위치를 구할때 사용한다. -> 목적함수를 최소화 할때

경사상승/경사하강 방법은 극값에 도달하면 움직임을 멈춘다. -> 목적함수 최적화 완료

 

종료조건: 컴퓨터에서 미분이 정확하게 0이되는 것은 불가능하므로 eps보다 작을때 종료하는 조건이 필요

 

변수가 벡터이면 편미분을 사용하여 계산한다.

 

다변수 함수에서는 절댓값대신 그래디언트벡터를 사용한다.

 

 

경사하강법은 미분가능하고 볼록(convex)한 함수에 대해 적절한 학습률(lr)과 학습횟수를 선택했을때 수렴이 보장되어있다.

특히 선형회귀의 경우 목적식 ||y-Xb||^2은 회귀계수 b에 대해 볼록함수이기에 알고리즘을 충분히 돌리면 수렴이 보장된다.

 

확률적 경사하강법

확률적 경사하강법은 모든 데이터를 사용해서 업데이트 대신 데이터 한개 또는 일부 활용하여 업데이트를 한다.

볼록이 아닌(non-convex)목적식은 SGD를 통해 최적화 할 수 있습니다.

 

SGD는 데이터의 일부를 가지고 패러미터를 업데이트하기에 연산자원을 좀 더 효율적으로 활용하는데 도움이 된다

SGD는 볼록이 아닌 목적식에서도 활용가능하므로 경사하강법보다 머신러닝학습에 더 효율적이다.

 

딥러닝에서 사용되는 데이터는 크기와 양이 방대하기에 경사하강법처럼 모든 데이터를 업로드하면 메모리가 부족하여 out-of-memory가 발생 -> GPU메모리 통제 불가능 -> 따라서 확률적 경사하강법을 활용하여 미니배치로 쪼갠 데이터를 업로드!

반응형
작성일
2024. 7. 4. 21:30
작성자
ssun_bear
반응형

https://www.boostcourse.org/ai100/lecture/739176

 

인공지능 기초 다지기 (부스트캠프 AI Tech 7기 프리코스)

부스트코스 무료 강의

www.boostcourse.org

강의를 보고 정리한 내용이며, 모르는 내용을 위주로 정리하려 한다.

 

1. 벡터와 행렬

 

- 1. 벡터

벡터는 숫자를 원소로 가지는 리스트, 배열이다.

벡터는 공간에서의 한점, 원점에서의 상대적 위치를 나타냄

벡터의 연산은 합, 차, 내적, 스칼라곱 등이 가능

 

벡터의 노름(norm)

노름(norm)은 원점에서 부터의 거리를 나타냄

L1-노름 : 각 성분의 변화량의 절대값을 모두 더함

L2-노름: 피타고라스 정리를 이용해 유클리드 거리를 계산함

 

 

노름의 종류에 따라 기하학적 성질이 달라지고 머신러닝에선 각 성질들이 필요할때가 상이하기에 둘다 사용한다.

 

 

두 벡터 사이의 거리와 각도를 노름을 활용하여 구할 수 있다.

거리: |x-y|

각도: cos a=(|x|^2+|y|^2-|x-y|^2)/2|x||y| -> arccos(cos(a)) = a (제 2 코사인 법칙 활용가능)

 

내적은 정사영된 길이와 관련이 있다

Proj(x) = |x| cosa

내적은 정사영의길이를 벡터 y의길이 |y|만큼 조정한 값이다

 

- 2. 행렬

행렬은 벡터를 원소로 가지는 2차원 배열

행(row)와 열(column)이라는 인덱스를 가진다.

행렬의 특정 행(열)을 고정하면 행(열)벡터라 부른다.

 

전치행렬 X^T: 행과 열의 인덱스가 바뀐 행렬을 말한다.

 

행렬을 이해하는 방법 (1)

벡터가 공간에서의 한 점이라면 행렬은 공간에서의 여러점을 나타낸다.

 

행렬의 연산: 덧셈, 뺄셈, 성분곱, 스칼라곱은 벡터와의 연산과 동일하다.

행렬의 곱셈: i 번째 행벡터와 j 번째 열벡터 사이의 내적을 성분으로 가지는 행렬을 계산하는 방식으로 이뤄진다.

행렬의 내적: np.inner는 i번째 행벡터와 j번째 행벡터 사이의 내적을 성분으로 가지는 행렬을 계산한다. (수학에서의 내적과 다름)

 

행렬을 이해하는 방법(2)

행렬은 벡터공간에서 사용되는 연산자로 이해. 행렬 곱을 통해 다른 차원의 공간으로 보낼 수 있다.

행렬 곱을 통해 패턴을 추출할 수 있고 데이터를 압축할 수도 있다.

 

역행렬 이해하기

A^(-1) 존재 조건: det(a) != 0 , 행=열 개수

numpy.linalg.inv로 구할 수 있다.

 

만약 역행렬 계산 할 수 없다면 유사 역행렬(pseudo-inverse) 또는 무어-펜로즈(Moore-Penrose) 역행렬 A+를 이용한다.

 

numpy.linalg.pinv 로 구할 수 있다.

 

연립방정식은 np.linalg.pinv를 이용하여 해를 구할 수 있다.

 

선형회귀식을 np.linalg.pinv를 이용하여 데이터를 선형 모델로 해석하면 구할 수 있다.

 

y절편을 따로 추가해줘야 하는 이유

sklearn을 사용할때는 자동으로 y절편( h(x)=ax+b라고 한다면 b에 해당하는 값)을 추정해주지만, Linalg는 회귀계수(회귀 선의 기울기)만 추정하기 때문에 y절편을 따로 추가해 줘야함

반응형
작성일
2023. 8. 14. 22:15
작성자
ssun_bear
반응형

BFS와 DFS는 모두 그래프를 탐색하는 방법이다.

그래프는 Node와 Node를 연결하는 Edge로 이루어진 자료구조이고

그래프를 탐색하는 것은 하나의 정점으로부터 연결된 모든 정점들을 한 번씩 차례대로 방문하는 것입니다.

깊이 우선 탐색(DFS, Depth - First Search)

https://developer-mac.tistory.com/64 (이미지 출처)

그림과 같이 하나의 정점에서 끝까지 탐색해 최하단의 정점까지 방문 후, 이전 갈림길로 돌아와 선택하지 않은 정점을 방문하는 식으로 탐색한다. DFS는 스택의 자료구조를 이용하고 구체적인 방문 과정은 다음과 같다.

 

  1. 탐색 첫 노드를 스택에 삽입후 방문 처리
  2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접노드를 스택에 넣고 방문 처리, 인접 노드가 없다면 스택에서 최상단 노드를 꺼내기
  3. 2를 수행할 수 없을때까지 반복

구현 방법

스택을 이용하여 구현, 실제로는 재귀함수를 이용하여 매우 간결히 구현가능 O(N) 시간 소요 가능

def dfs(graph, v, visited):
  visited[v] = True
  print(v, end = '')

  for i in graph[v]:
    if not visited[i]:
      dfs(graph, i, visited)

graph = [] # 그래프를 표현하는 인접 리스트(2차원 리스트)
visited = [] # 각 노드가 방문된 정보를 표현하는 1차원 리스트

dfs(graph, 1, visited) # dfs 함수 호출

 

너비 우선 탐색(BFS, Breadth - First Search)

그림에서와 같이 루트 노드와 같은 거리에 있는 노드를 우선으로 방문하며 탐색한다.

BFS는 큐(Queue) 자료구조를 이용하며 구체적인 동작 과정은 다음과 같다.

 

  1. 탐색 첫 노드를 큐에 삽입후 방문처리
  2. 큐에서 노드를 꺼내 인접노드중 방문하지 않은 모든 노드를 큐에 삽입하고 방문처리
  3. 2를 수행 할 수 없을때 까지 반복

구현 방법

파이썬에서 큐를 deque을 이용하여 구현하는 것이 좋고 O(N)시간이 소요된다. 실제 수행 시간은 DFS보다 나은 편

from collections import deque

def bfs(graph, start, visited):
  queue = deque([start])
  visited[start] = True

  # 큐가 빌 때까지 반복
  while queue:
    v = queue.popleft()
    print(v, end = '')

    for i in graph[v]:
      if not visited[i]:
        queue.append(i)
        visited[i] = True

graph = [] # 그래프를 표현하는 인접 리스트(2차원 리스트)
visited = [] # 각 노드가 방문된 정보를 표현하는 1차원 리스트

bfs(graph, 1, visited) # bfs 함수 호출

 

DFS와 BFS 비교

  DFS BFS
탐색 과정 현재 정점에서 갈 수 있는 끝까지 방문하며 탐색 현재 정점에 연결된 가까운 점들부터 탐색
구현 방법 스택 또는 재귀 함수로 구현 큐 자료구조 이용

 

문제별 DFS / BFS 활용

1. 그래프의 모든 정점을 방문하는 것이 주요한 문제

단순히 모든 정점을 방문하는 것이 중요한 문제의 경우 DFS, BFS 두 가지 방법 중 어느 것을 사용해도 상관이 없다. 

 

2. 경로의 특징을 저장해둬야 하는 문제

예를 들어 각 정점에 숫자가 적혀있고 a부터 b까지 가는 경로를 구하는데 경로에 같은 숫자가 있으면 안 된다는 문제 등, 각각의 경로마다 특징을 저장해둬야 할 때는 DFS를 사용한다. (BFS는 경로의 특징을 가지지 못한다)

 

3. 최단거리를 구하는 문제

미로 찾기 등 최단 거리를 구해야 할 경우, BFS가 유리하다.

왜냐하면 DFS로 경로를 검색할 경우 처음으로 발견되는 해답이 최단거리가 아닐 수 있지만, BFS는 현재 노드부터 가까운 곳부터 찾기 때문에 경로 탐색 시 먼저 찾아지는 해답이 곧 최단거리이기 때문이다.

 

이외에도 검색 대상 그래프가 정말 크다면 DFS를 고려하고 검색 대상의 규모가 크지 않고, 검색 시작 지점으로부터 원하는 대상이 별로 멀지 않다면 BFS를 고려하는 등으로 더 생각해볼 수 있다. 

반응형