요약


임상시험은 대부분 무작위 선정(Randomization)으로 시험군(case), 대조군(Control)을 나눈다. 이 시험군과 대조군에 중재를 할 때, 시험군 또는 대조군에 속해있는 대상자들이 모종의 이유로 중재를 못받게 되는 상황이 된다(중도 탈락, 중재 전 사망, 치료 불이행). 이 때, 어쩔수없는 이유로 중재를 못받은 사람을 분석에 포함해서 의학적 성과(outcome)을 측정해야하냐 말아야하나 고민되는 시점이 생긴다. IIT은 모종의 이유가 있다 하더라도, 일단 무작위 배정되었으면, 분석에 포함하는 것을 일컫는다(“once randomized, always analyzed”). 반대의 개념으로는 "Per-Protocol"이라고 하며, 중재를 못받은 샘플을 분석에 포함하지 않는 것을 의미한다.

 

 

Reference

[1] https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5654877/

반응형

딥러닝을 이용한 서비스를 배포할 목적이 있으면, 운영체제 등에서 독립적으로 S/W가 돌아갈 수 있게끔 배포하는 것이 중요하다. 이 때 주로쓰이는 것이 컨테이너 기술인데, 컨테이너 기술을 이용해서, 딥러닝의 GPU가속을 사용해보자.

 

단계는 아래와 같다


  1. NVIDA driver (그레픽 드라이버) 와 docker은 설치
  2. CUDA 이미지 풀하기
  3. GPU 지원 컨테이너 만들기
    1. 방법 1: Native GPU support
    2. 방법 2: Nivida container Runtime을 이용하기
    3. 방법 3: Nivida GPus 을 위한 도커엔진 유틸리티 이용하기
  4. 확인: GPU 지원 컨테이너 내 접속 후 cuda확인

 

0. NVIDIA driver 확인


이미 설치된 경우, 다음의 코드로 CUDA Version을 확인한다.아래와 같이 CUDA Version이 11.7임을 확인할 수 있다. 

$nvidia-smi

 

 

2. 도커허브에서 CUDA 이미지 가져오기


docker hub에 cuda을 검색하면, 아래의 그림과 같이 여러 이미지들이 검색되어 나온다.

그 중에, nvidia/cuda을 설치해본다. (링크: https://hub.docker.com/r/nvidia/cuda)

 

nvidia/cuda 리포지토리에 들어가면 Tags가 나오는데, CUDA 버전에 맞는 tag을 찾아본다.

 

아래와 같이 CUDA 버전에 맞는 이미지를 찾는다.

nvidia-smi 명령어에서 cuda 버전이 11.7이었으므로 11.7을 검색해서 runtime, base, devel, 버전 및 원하는 컨테이너 OS환경에 맞춰 설치한다.

 

필자는 nvidia-11.7.1용 런타임-ubunut22.04을 pull했다.

 

제대로 잘 pulling되었는지 아래와 같이 확인해본다.

 

 

GPU 지원 컨테이너 사용: 방법1: Native GPU 지원


아래와 같이 docker 및 docker환경에서 GPU을 돌리기위한 데몬(nvidia-container-toolkit)을 설치한다

// docker, nvidia-conatiner-toolkit 설치
$ sudo apt-get install -y docker nvidia-container-toolkit

 

모든그레픽카드을 사용할 수 있도록 GPU세팅을 하는 것은 아래와 같다.

docker run --gpus all [이미지명:테그명]

 

필자는 background option으로 (-d), ssh로 접속해서 인터렉션할것이기 떄문에(-it)아래와 같이 옵션을 주어 컨테이너를 실행한다.

컨테이너명이 "2c2e80a61f240a689d1d6d13a94c886fdab9508fc6226e1889ac5cbb623a5528"로 반환되어 컨테이너가 실행중임을 알려준다.

 

컨테이너가 잘 생성되었는지, docker ps명령어로 확인해본다. 33초전에 실행됨을 확인할 수 있다.

이 컨테이너로 직접 들어가보자

 

대화창이 나온다.

 

nvidia-smi명령어로 host graphic card을 사용할수 있는지 확인해본다.

 

반응형

0. PUSH할 원격저장소를 만든다. docker hub (https://hub.docker.com/) 에서 로그인 후, 원격저장소를 생성한다. github저장소처럼 "ID/원격저장소명"으로 주소가 만들어진다.

 

 

1. 도커 로그인

$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: [YourID]
Password: ******

Login Succeeded

 

 

2. Docker hub에 올릴 이미지를 찾는다. 여기서 필자는 REPOSITOY에 simple-nlp-app, TAG은 v1을 올릴 것이다. 그렇지만, 도커허브에 올릴 때는 ID/repository명  = docker image ls에서의 REPOSITORY 명이 동일해야한다. 따라서, 한번 변경이 필요하다. 

$ docker image ls
REPOSITORY                                                TAG                                                                          IMAGE ID       CREATED         SIZE  
simple-nlp-app                                            v1                                                                           7108c8dbe574   6 minutes ago   2.73GB
simple-nlp-app                                            v0                                                                           c82b9d4786fe   9 minutes ago   2.73GB
simple-nlp-app                                            latest                                                                       798c7cf60156   2 days ago      2.72GB
nginx                                                     latest                                                                       ac8efec875ce   6 days ago      142MB 
alpine/git                                                latest                                                                       22d84a66cda4   3 weeks ago     43.6MB
hubproxy.docker.internal:5000/docker/desktop-kubernetes   kubernetes-v1.25.2-cni-v1.1.1-critools-v1.24.2-cri-dockerd-v0.2.5-1-debian   09d7e1dbc2c4   2 months ago    363MB 
k8s.gcr.io/kube-apiserver                                 v1.25.2                                                                      97801f839490   2 months ago    128MB 
k8s.gcr.io/kube-controller-manager                        v1.25.2                                                                      dbfceb93c69b   2 months ago    117MB 
k8s.gcr.io/kube-scheduler                                 v1.25.2                                                                      ca0ea1ee3cfd   2 months ago    50.6MB
k8s.gcr.io/kube-proxy                                     v1.25.2                                                                      1c7d8c51823b   2 months ago    61.7MB
k8s.gcr.io/pause                                          3.8                                                                          4873874c08ef   5 months ago    711kB 
k8s.gcr.io/etcd                                           3.5.4-0                                                                      a8a176a5d5d6   6 months ago    300MB 
k8s.gcr.io/coredns                                        v1.9.3                                                                       5185b96f0bec   6 months ago    48.8MB
docker/desktop-vpnkit-controller                          v2.0                                                                         8c2c38aa676e   19 months ago   21MB  
docker/desktop-storage-provisioner                        v2.0                                                                         99f89471f470   19 months ago   41.9MB
nginx                                                     1.14.2                                                                       295c7be07902   3 years ago     109MB 
dattarajrao/simple-app                                    latest                                                                       3f4a466b587c   4 years ago     132M

 

3. 두 가지 방법이 있는데, 첫 번째는 docker image tag을 이용하는 방법.

  • docker image tag SOURCE_IMAGE[:TAG] TARGET[:TAG]  . 이 명령어는 원본 이미지에서 타겟이이지로 리포지토리 명을 다시 테그를 달 수 있게한다.
  • docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] : 이 명령어는 실행중인 컨테이너를 다시 이미지화하는 방법이다.

아래의 예시는 docker image tag을 이용한 방법이다. tag을 이용할 때, 미리 생성한 원격저장소의 이름과 동일하게 해준다. 그렇지 않으면 아래와 같이 에러가 뜬다.

$ docker push 4pymgalion/simple-nlp-app:v1
The push refers to repository [docker.io/4pymgalion/simple-nlp-app]
An image does not exist locally with the tag

 

따라서, 아래와 같이 원격저장소의 ID/저장소명과 같이 도커 이미지를 테그를 다시 달아준다. 그러면 추가로 "4pygmalion/simple-nlp-app"라는 리포지토리 이름을 가진 이미지가 생성된다.

$ docker tag simple-nlp-app:v1 4pygmalion/simple-nlp-app:latest
$ docker images
REPOSITORY                                                TAG                                                                          IMAGE ID       CREATED          SIZE
4pygmalion/simple-nlp-app                                 latest                                                                       7108c8dbe574   14 minutes ago   2.73GB
simple-nlp-app                                            v1                                                                           7108c8dbe574   14 minutes ago   2.73GB
nginx                                                     latest                                                                       ac8efec875ce   6 days ago       142MB 
alpine/git                                                latest                                                                       22d84a66cda4   3 weeks ago      43.6MB
hubproxy.docker.internal:5000/docker/desktop-kubernetes   kubernetes-v1.25.2-cni-v1.1.1-critools-v1.24.2-cri-dockerd-v0.2.5-1-debian   09d7e1dbc2c4   2 months ago     363MB 
k8s.gcr.io/kube-apiserver                                 v1.25.2                                                                      97801f839490   2 months ago     128MB 
k8s.gcr.io/kube-scheduler                                 v1.25.2                                                                      ca0ea1ee3cfd   2 months ago     50.6MB

 

4. 푸시: Docker push 도커이미지/리포지토리명

$ docker push 4pygmalion/simple-nlp-app:latest
The push refers to repository [docker.io/4pygmalion/simple-nlp-app]
e56c84262ba7: Pushing [>                                                  ]  35.33kB/2.22MB
cec010fb56f8: Pushing [>                                                  ]  544.8kB/2.262GB
5af9244c08c5: Pushing [==================================================>]  5.632kB
fac360d91a98: Preparing
c43e4ddc5992: Preparing
e5896e4ce6c3: Waiting
7c40600bc52d: Waiting
d326469892d9: Waiting
b5ebffba54d3: Waiting

 

반응형

 

요약


쿠버네티스를 이용하면,파드를 통해 클라이언트들이 어플리케이션을 호출할 수 있다. 그러나, 클라이언트 입장에서는 각각 파드의 주소가 존재하는하고, 클라이언트는 어느 파드로 갈지 명시하지 않았는데도, 쿠버네티스가 알아서 각각의 파드가 처리하게 만들어준다. 즉, 네트워킹이 쿠버네티스에 의해서, 알아서 처리되는데, 이 네트워크 서비스를 제공할 수 있는 자원이 "서비스(Service)"이다. 즉, 파드로 실행중인 앱을 네트워크서비스로 노출하게 해주는 자원이다.

 

 

서비스를 이용하기위해 각 파드, 노드가 만족해야할 사항[1]


  • 각 파드는 노드상의 모든 파드와 통신할 수 있어야함
  • 노드상의 에이전트(데몬, kubelet)은 해당 노드의 모든 파드와 통신할 수 있어야함.

 

 

어플리케이션을 네트워크 서비스로 외부에 노출하기


아래와 같이, 디플로이먼트(deployment)와 서비스(Service)를 명시한 yaml파일을 각각 만든다. 

// nginx-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  ports:
  - port: 80
    protocol: TCP
  selector:
    run: my-nginx
# run-my-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 2
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80

 

그리고, 아래와 같이 클러스터 내부에서는  서비스가 가능하고, 각 클러스터의 IP을 확인할 수 있다.

$ kubectl get services
NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes        ClusterIP   10.96.0.1        <none>        443/TCP        28h
my-nginx          ClusterIP   10.108.171.235   <none>        80/TCP         26h

해당 클러스터의 내부

 

 

Trouble shooting: Cluster IP에 접속이 안될 때 -> Node Port로 외부 클라이언트가 접속할 수 있도록 변경 [2]


서비스하는 클러스터의 IP는 가상의 IP이기 때문에, 클러스터 내부에서 내부로만 서비스할 수 있다. 즉 위의 예시에서처럼 클러스터 IP가 10.108.171.235면, 이 클러스터로 들어가야만 "10.108.171.235:80"의 서비스를 요청하고 받을 수 있는 것이다. 이것을 해결하기, "Cluster IP"을 "Node Port"로 변경해주어야 한다.

Node Port은 외부 클라이언트가 노드로 접속하기 위한 포트를 의미한다. 이 노드 포트을 변경하려면 아래와 같이 kubectl expose을 이용한다.

$ kubectl expose deployment hello-world --type=LoadBalancer --name=example-service

 

expose을 하면 TYPE이 NodePort인 서비스가 하나 생성이된다.  example-serivce라는 이름을 가진 서비스의 TYPE이 NodePort인 것을 잘보자. 이 클러스터의 가상 IP은 10.101.151.252이다. 이것은 여전히 가상IP이기 때문에 서비스를 요청할 수 없다. 다만, 이 노드의 원래주소(localhost, 또는 privateIP, publicIP)로 들어갈때, 30384포트로 요청을하면 알아서 80번으로 바꿔준다. 즉 포트포워딩으로 30384을 80으로 바꿔서 10.101.151.252로 요청해볼 수 있다.

$ kubectl get services
NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
example-service   NodePort    10.101.151.252   <none>        80:30384/TCP   26h
kubernetes        ClusterIP   10.96.0.1        <none>        443/TCP        28h

$ curl localhost:30384
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

 

 

[1] https://kubernetes.io/ko/docs/concepts/services-networking/

 

서비스, 로드밸런싱, 네트워킹

쿠버네티스의 네트워킹에 대한 개념과 리소스에 대해 설명한다.

kubernetes.io

[2] https://stackoverflow.com/questions/49297226/kubernetes-cluster-ip-service-not-working-as-expected

반응형

본 포스팅은 naver d2 이활석님의 발표자로를 글과 이해가 쉽도록 만든 Figure들로 재구성했음을 알립니다.

 

요약


  1. MSE로 최적화하는 것과 MLE로 최적화 하는 것은 동치이다. 
  2. sigmoid을 출력값으로 하는 경우 MSE로 최적화하는 것보다 CE로 하는 경우, 학습이 더 빨리 된다. 이는 activation function(sigmoid)의 도함수를 한 번 계산하지 않아도 되기 때문이다.

1. Backpropgation (역전파) 과정에 대한 가정(Assumption)


역전파알고리즘을 이용하기 위해서는 2가지 가정이 일단 필요하다 [1].

  1. Average $E = 1/n \sum_{x}E_{x}$: $n$개의 training 데이터에 해당하는 각각의 $x$에 대한 손실함수의 합의 평균은 손실함수 전체와 같다. 이는 각 훈련데이터를 각각 구한것의 그레디언트를 전체 오차함수에 대해서 일반화을 위하기 때문이다.
  2. 신경망의 출력값($\hat{y}$)에 대해서 손실함수를 표현할 수 있어야 한다는 것이다.

 

직관적으로 생각해보면 아래와 같다.

첫 번째로, MSE로 종류의 $E$(error)을 설정했다고 하자. 그리고, 이 오차함수는 예측값($y'$)과 실측값($y$)의 이를 구하게 된다. 그러면 다음과 같이 표기할 수 있다. 가령, $E(y, y')= (y-y')^{2}$가 라고 하자. 이는 일단 두번째 조건을 만족한다. 왜냐하면 $y'$은 신경망의 두번째 출력값으로 표현되었기 떄문이다. 그리고, 이러한 $y'$을 출력하기위한 입력값 $x$가 있을 것이다. 이 $x$가 $n$개가 있다고하면 각각의 $n$개의 오차의 합은 전체 $E$가 될 수 있다는 것이다. 즉, 다음과 같은 식으로 표현할 수 있다. $E=1/n \sum_{x} (y-y')^{2}$. 이렇게되면 1번 가정도 만족한다. 

 

위의 가정을 만족할 수 있으면, 이제 손실함수를 최소화시키는 최적의 파라미터($\theta$)을 찾으면된다. 보통 우리는 아래와 같이 표현한다.

$\theta^{*} = argmin_{\theta \in \Theta} L(f_{\theta}(x), y)$

위 식을 친절하게 해석해보면 다음과 같다.

  1. $\theta^{*}$: 우리가 원하는 최적의 파라미터를 의미한다. 
  2. $L(f_{\theta}(x), y)$: $\theta$가 어떤 것이 지정되냐에 따르는 손실함수($y$와 예측치 $f_{\theta}(x)$의 차이)를 의미한다.
  3. $argmin_{\theta \in \Theta} L$ : $\theta$가 될수 있는 모든 수 중에 $L$을 가장 작게만드는 $\theta$을 의미한다.

 

 

2. Gradient descent (경사하강법): 경사하강법으로 최적의 파라미터를 찾아간다.


위의 $\theta^{*} = argmin_{\theta \in \Theta} L(f_{\theta}(x), y)$식의 최적의 해를 찾는 방법으로 경사하강법(Gradient descent)가 이용된다. 이는 Iteration으로, 같은 로직을 여러번 반복하는 것을 의미한다. 식이 회귀방정식이라면 close form solution으로 직접 전개해서 풀면되지만, 활성화 함수랑 이것저것 엮여있는 DNN은 open form solution이어서 직접 추정해서 구해야한다.

 

경사하강법으로 최적의 파라미터($\theta$)을 구할 때, 고려사항과 각각의 방법은 아래의 표처럼 정리할 수 있다.

고려사항 방법
어느정도만큼 파라미터를 업데이트 할 것인가?
(= $\theta -> \theta + \Delta\theta$)
새로운 $\theta + \Delta\theta$로 손실을 측정할 때가 더 작을 때
(= $L(\theta + \Delta\theta) < L(\theta)$)
언제 멈출 것인가? 더 이상 업데이트가 변화하지 않을 때
$L(\theta + \Delta\theta) < L(\theta)$
어떻게 업데이트할 만큼($\Delta\theta$)을 찾을 것인가? $\Delta\theta = -\mu \nabla\theta$ where $\mu > 0 $

 

그림1. 이미지 출처: https://builtin.com/data-science/gradient-descent

 

위의 전략대로 아래와 같이, 일단 새로운 파라미터에 대해서 손실함수를 구하고자한다. 헷갈리지 말아야할 것은 $x$에 대해서 구하는게 아니라, 최적의 $\theta$을 찾는 것이다. 위의 그림과 같이 x1, x2축에 해당하는 w, b에따라서 손실함수의 크기 $J(w, b)$가 달라지는 것이다. 즉, $\theta$가 우리의 목표이다.

전체 데이터 포인트 X가 있으면, 아래와 같이 풀이가 가능하다.

  • $L(\theta_k, X) = \sum_{i}{L(\theta_{k}, x_{i}})$: 각 데이터포인트($x_{i}$)의 합은 전체와 같다.
  • $\nabla L(\theta_k, X) = \sum_{i}{\nabla L(\theta_{k}, x_{i}})$: 위의 식을 양변에 $\theta$에 대해서 미분한다. 
  • $\nabla L(\theta_k, X) \triangleq \sum_{i}{\nabla L(\theta_{k}, x_{i}})/ N$: 최적화만 구하면되니까, 이 미분값이 N으로 나눠도 된다. 
  • $\nabla L(\theta_k, X) \triangleq \sum_{j}{\nabla L(\theta_{k}, x_{j}})/M, ~ where ~M< N$: 전체 훈련데이터에 해당하는 데이터포인트를 다넣어서 N개의 연산을 해도되지만,너무 연산이 많이드니, 적당히 작은 M으로 나눠서 해를 찾을 수 있다. 이 때 랜덤으로 M개의 데이터 j개를 뽑는다.

즉, 결국에 X개 계산한다음에 업데이트하고싶지만, 계산이 많이 드니 M개만큼 쪼개서 업데이해볼 수 있다는 것이다.수식으로는 $\nabla L(\theta_k, X)$ 만큼 움직이는 것 대신에 $\sum_{j}{\nabla L(\theta_{k}, x_{j}})/M$ 만큼 움직여서 업데이트할 수 있다는 것이다.

그리고, 아래와 같이 다음(k+1)의 파라미터틀 업데이트한다. 우리는 이 k를 iteration, M개를 넣는 작업을 step이라고한다. tensorflow에는 iteration은 epoch, M개의 미니배치로 계산하는 것은 step이라는 표현으로 사용한다.

$\theta_{k+1} = \theta_{k} - \mu \nabla L(\theta_{k},X)$

 

 

 

3. Backpropgation에 따라서 각 레이어의 파라미터를 업데이트


위에서 구한 것과 같이 손실함수(loss function)은 $L(\theta_{k},X)$라고 했다. 헷갈리지 말아야할 것이, 파라미터($\theta$)에 해당하는 것은 각각의 레이어의 $w, b$을 의미한다. 2개의 표현식을 통틀어 크게는 $\theta$라고 표현한다. 

파라미터 업데이트는 $\theta_{k+1} = \theta_{k}-\mu\nabla L(\theta_{k}, X)$ 가 목표다. 이를 각각 w와 b에 대해서 풀어쓰면 다음과 같다.

  • $w_{k+1}^{l} = w_{k}^{l} - \mu\nabla L_{w_{k}^l}(\theta_{k}, X)$ : $k$번째 업데이트 할 때, $l$번째 레이어의 $w$에 대해서 미분이 필요하다
  • $b_{k+1}^{l} = w_{k}^{l} - \mu\nabla L_{b_{k}^l}(\theta_{k}, X)$: $k$번째 업데이트 할 때, $l$번째 레이어의 $b$에 대해서 미분이 필요하다

위의 두 식을 보면 각 레이어 $l$에 대해서 매 업데이트시(k)마다 미분이 필요하다. 이건 너무 계산이 많이들어 딥러닝이 못했던 허들이기도 하다.

 

그렇기에 이를 해결하고자 했던, 역전파로 해결한다 [2]. 이 계산을 알기위해서는 forward방향에서의 오차를 먼저 알아야한다. 그림4처럼 L번쨰 레이어의 i번째에 원래 뉴런이 하는 작업을 $\sigma$ (활성화함수아님)라 하자. 그러면, $z_{j}^{l}$이 입력이 오던걸, $\nabla z_{j}^{l}$만큼 변경하면, 출력값은 $\sigma(z_{j}^{l} + \nabla z_{j}^{l})$로 바뀐다. 그러면 최종적으로 전체 손실함수값은 $\frac{\partial C}{\partial z^l_j} \Delta z^l_j$만큼 바뀐다고 알려져있다.

그림 4.

이제 역전파로 바꿔생각해보자. 이를 구하기위한 각 notation은 아래 와 같다. 그리고, 레이어의 개수가 $l$개라고하자(=$l$ 레이어가 마지막레이어).

  • $\delta_{j}^{l}$: $j$번째 뉴런(유닛)의 $l$번째의 레이어의 변화량. 쉽게 표현하면, j번째 뉴런이 조금변경되면, 오차가 얼마나 변화하는지를 의미한다. 상세히는 w, b로 표현하면 $\partial C / \partial w^l_{jk}$, $\partial C / \partial b^l_j$도 된다. $\delta_{j}^{l}$을 활성화 함수가 포함된 합성함수라고 생각하면 다음과 같이 미분된다 [3]. $\delta^L_j = \frac{\partial C}{\partial a^L_j} \sigma'(z^L_j).$.
  • $a_{j}^{L}$: $l$레이어에 존재하는  $j$번재 아웃풋
  • $C$: cost function을 의미. 예를 들어 $C=1/2 \sum _{j}(y_{i}-a_{j}^{L})^{2}$
  • $z^{L}$: L번째 레이어에서 출력한 결과

 

다음과 같이 역전파를 진행한다.

순서 수식 의미
1 $\delta^L = \nabla_a C \odot \sigma'(z^L)$ l번째 레이어의 출력값이 변하면, 손실함수가 얼마나 변할까?
그리고 그 계수에 해당하는 activation()만큼 변하겠지?

$\nabla_a C$은 예측값과 출값의 차이니까 이를 대입한다. (단순히 MSE라고 생각)
가령, $\delta^L = (a^L-y) \odot \sigma'(z^L).$ 을 구할 수 있다.
2 $\delta^l = ((w^{l+1})^T \delta^{l+1}) \odot \sigma'(z^l)$ $l$번째 레이어와 $l+1$번째 레이어에서의 관계식을 의미한다. 

일단 다음 레이어인 $l+1$번째의 오차를 먼저알기 때문에, 이때 계산에 쓰였던 파라미터 $w^{l+1}$을 전치한다음에 곱하고, 활성화함수만 곱해주면 이전 연산의 에러를 구할 수 있다는 것이다.

3 $\frac{\partial C}{\partial b^l_j} = \delta^l_j.$ 1,2을 이용하여 각 b에 대해서 편미분을 구할 수 있다.
4 $\frac{\partial C}{\partial w^l_{jk}} = a^{l-1}_k \delta^l_j.$ 1,2을 이용하여 각 w에 대해서 편미분을 구할 수 있다.

 

 

 

 

MSE와 CrossEntorpy 비교: 왜 굳이 이진분류를 할 때 Xentopry을 사용할까?


 

TLTR: CrossEntropy을 이용할 수 있으면, gradient vanishing에서 조금이나마 MSE보다는 이득이기 떄문이다.

 

MSE와 CE을 이용하는 각각의 모델에서, 우리 모델의 마지막 레이어가 sigmoid로 활성화 함수를 썼다고 가정하자. MSE은 출력레이어에서의 오차를 $\delta^L = \nabla_a C \odot \sigma'(z^L)$처럼 계산한다고 했다. 자세히보면 오차를 계산할 때, 오차를 계산하자마자 $\sigma'(z^L)$을 한 번 한다. C은 간단히 y-a(마지막 아웃풋과의 차이)이라고하자. 그러면 MSE을 계산하려면 $\delta^L = (a-y) \sigma'(z^L)$.가 된다.

반대로 CE을 이용하자고하자 CE의 loss은 $C=-[ylna+(1-y)ln(1-a)]$이다. 이걸 a에 대해서 미분하면 다음과 같다.

  1. $\nabla_{a}C = \frac {1-y} {(1-a)a}$.
  2. $\sigma'(z^L)$도 미분하면, $\sigma'(x)=\frac{d}{dx}\sigma(x)=\sigma(x)(1-\sigma(x))$을 따르므로, $a(1-a)$가 된다.
  3. $\delta^L = \nabla_a C \odot \sigma'(z^L)$ 라고 했기 때문에,
  4. $\delta^L = \frac {1-y} {(1-a)a} a(1-a) = (a-y)$ 이므로,  $\sigma'(z^L)$가 상쇄된다. 

정리하면, MSE을 이용할경우 backpropagation에서 gradient decay가 한 번 발생하고 역전파하기 때문에, 학습이 늦게되는 반면, CE을 이용한 경우 gradient decay가 한번 없이 역전파해서 상대적으로 학습이 빠르게 된다

그림3. sigmoid function의 원함수와 미분된 함수의 값

 

 

 

 

MSE의 최적화와 Likelihood을 이용한 최적화의 비교


MLE(Maximum likelihood estimation)은 관측한 데이터(x)을 가장 잘 설명하도록 파라미터($\theta$)을 찾는 과정이라고 생각하면 쉽다. 조금 바꾸어 말하면, 모델(f)내에 파라미터가 출력(y)을 가장 잘 설하도록 모델의 파라미터($\theta$)을 찾는 과정이랑 같다. 우리가 모델에서부터 얻는 예측값($f_{\theta}(x))$( =$\hat(y)$ 이기에...)가 정규분포를 따른다면, 평균적으로 실측값(y)을 얻게끔 파라미터를 얻는 과정이다. 따라서 아래와 같이 수식으로 표현할 수 있다.

$\theta^{*} = argmin_{\theta}[-log(p(y|f_{\theta}(x))]$

위의 식이 (-)Negative와 log가 붙은 negative log likelihood 이다. 의미는 모델의 반환값이 어떤 분포를 따른다면, 따른다면, 이 분포의 파라미터를 잘조절에서 y가 잘 나오게해주는 $\theta$을 찾아주세요. 라는 의미이다. 

 

위를 풀기위해 함수를 최적화하기위해 IID 을 가정한다

  • Independent : $p(y|f_{\theta}(x) = \Pi_{i}P_{D_{i}}(y|f_{\theta}(x_{i}))$: 트레이닝 데이터 DB ($D_{i}$)을 최적화하는 것에 대한 모든 곱은 전체와 같다. (독립사건이기에 서로 곱할 수 있다)
  • Identical distribution: $p(y|f_{\theta}(x) = \Pi_{i}p(y|f_{\theta}(x_{i}))$: training데이터는 매번 다른 분포를 같는 것이 아니라, $x1$이 정규분포라면 $x_{2},...x_{i}$가 모두 정규분포이다.

이를 이용하여 다음과 같이 negative loglikelhood을 정리할 수 있다

=> $-log(p(y|f_{\theta}(x))) = -\sum_{i}log(p(y_{i}|f_{\theta}(x_{i})))$: (IID을 이용). 각각의 확률값의 negative log likelhood을 다 더하면 전체의 training DB의 negative loglikelihood와 같다

위의 분포가 정규분포를 따른다면, 정규분포의 Likelihood을 이용해서 파라미터를 찾을 수 있다. 정규분포의 log-likelihood값은 위의 그림2와 같다. x은 관찰값 데이터포인트, $\mu$은 우리가 구하고자하는 파라미터 중에 평균에 해당한다. 이 식을 우리의 문제로 바꿔보자. x가 관찰값이었다면, 우리문제에서는 모델의 매번반환하는 $f(x)$의 평균값이 $\mu$가 되고자하는 것이다. 즉, $f_{\theta}(x_{i}) =\mu_{i}, ~\sigma_{i}=1$ 인 것을 원한다.

그림 2. log-likelihood function .&nbsp;https://www.statlect.com/fundamentals-of-statistics/normal-distribution-maximum-likelihood

$= -\frac{n}{2}ln(2\pi)-\frac{n}{2}(\sigma^{2}) - \frac{1}{2\sigma^{2}}\sum_{j=1}(x_{j}-\mu)^{2}$ 을 

$= -\frac{n}{2}ln(2\pi)-\frac{n}{2}(\sigma^{2}) - \frac{1}{2\sigma^{2}}\sum_{j=1}(f_{\theta}(x) - y_{i})^{2}$: 이렇게 바꿀 수 있다.

위의 식을보면 $y_{i}$와 $f_{\theta}(x_{i})$의 차이의 제곱. 즉 MSE와 같다.

 

반면의 베르누이 분포(=확률(p)에 따라, 결과가 0,1로 나오는 분포)를 따른다면 아래와 같다.

$p(y_{i}|p_{i})=p_{i}^{y_{i}}(1-p_{i})^{1-y_{i}}$

<=> $log(p(y_{i}|p_{i})) = y_{i}logp_{i} + (1-y_{i})log(1-p_{i})$
<=> $-log(p(y_{i}|p_{i})) = -[y_{i}logp_{i} + (1-y_{i})log(1-p_{i})]$

 

 

Reference


[1]  Nielsen (2015), "[W]hat assumptions do we need to make about our cost function ... in order that backpropagation can be applied? The first assumption we need is that the cost function can be written as an average ... over cost functions ... for individual training examples ... The second assumption we make about the cost is that it can be written as a function of the outputs from the neural network ..."

[2] http://neuralnetworksanddeeplearning.com/chap2.html

 

Neural networks and deep learning

In the last chapter we saw how neural networks can learn their weights and biases using the gradient descent algorithm. There was, however, a gap in our explanation: we didn't discuss how to compute the gradient of the cost function. That's quite a gap! In

neuralnetworksanddeeplearning.com

[3] https://j1w2k3.tistory.com/1100

반응형

 

 

투자전에 알아두어야할 기초 용어


  • MNO(Mobile Network Operator): 직접 통신망을 소유하고 판매하는 사업자 
  • MVNO(Mobile Virtual Network Operator): 이통통신 재판매 사업자(Reseller). 가상이동통신망 사업자. 실제로는 통신망이 없는데, 통신망이 있는 것처럼(통신망을 빌려서 판매하기 때문에) 통신상품에 이윤을 붙여 판매하는 사업자를 말한다. 우리나라는 MNO에게 망을 의무적으로 개방하게끔 되어있다 [3].
  • IPTV (Internet Protocol TeleVision). 멀티미니더 콘텐츠를 초고속인터넷망을 통해 디지털 셋톱박스에 연계된 TV단말기를 이용하여 제공되는 TV서비스를 말한다 [3].
  • CATV (Cable TeleVision):  =케이블TV. 광대역 전송로를 이용하여 각 수신시에 분배하는 통신방식.
  • 티커머스(T Commerce): TV홈쇼핑이 일방향 판매채널이라면, T커머스는 양방향으로 소통이 가능한 판매채널. 쉽게생각해서 아프리카TV에서 쇼핑한다고 생각하면 티커머스다.
  • ARPU(Average revenue per user): 고객 1인당 매출금액. 고객 1명이 어느정도 회사에 지불하는지를 의미힌다. 
  • 28Ghz 대역: 고주파대역으로 속도가 빠르고, 지연이 적으면서 더 많은 데이터를 전송할 수 있다. 다만, 주파수가 직진성이 강해서, 범위가 좁다보니 기기를 여러대를 설치해야하므로 인프라부담이 많다.
  • RS(수익배분), 종량제(RM): 알뜰폰사업자(MNVO)은 MNO로부터 통신망을 빌려(도매) 무선서비스를 판매한다. RS은 요금제 구성이 같은 요금제를 판매하면 MNVO:MNO의 수익분배를 하는 구조이다. MNVO가 독자적인 서비스를 구성하면 RM을 따른다. 음성(통화), 문자, 데이터에 대한 요금이 정해져있다.

 

 

 

SK텔레콤: SK텔레콤은 AI + Digial infra 사업, SK Square은 ICT 투자기업


SK텔레콤은 2021년 4월 14일 분할계획이 승인되었다. 원래 SK하이닉스 등 굴직굴직한 기업들이 자회사로 있었으나, 통신사업과 비통신사업을 분리함으로써, 통신사업의 디스카운트를 비통신사업에게도 적용받지 않게하여, SK텔레콤들의 자식들을 포함한 가족들의 모든 가치를 시장에서 온전히 평가받자(=사업가치의 제대로 인정받자)라는 것이 취지였다 [1]. 이에 따라, 한 가정에 있던 자식들이, 엄마(SK텔레콤), 아빠(투자부문)으로 각각 다른집에 살아야할 형편이 되었다. 분할 후에 아래와 같이 자회사들의 지분이 나눠졌다.

  • SK텔레콤 이하에는 주로 유무선통신의 시너지를 낼 수 있는 SK브로드밴드, SK텔링크, 피에스앤마케팅,  F&U신용정보, 서비스탑, 서비스에이스, SK오앤에스이 있다.  
  • SK스퀘어(신설회사)에는 SK하이닉스, ADT캡스, 11번가, 티맵모빌리티, 원스토어, 콘텐츠웨이브, 드림어스컴퍼니, SK플래닛, FSK L&S, 인크로스, 나노엔텍, 스파크플러스, SK Telecom CS T1, SK Telecom TMT Investment, ID Quantique, Techmaker 등 총 16개 회사가 있다 [3].

 

 

주요사업부문은? 4가지: 유무선통신 / 미디어 / 엔터프라이즈 / AIVERSE. 


DART에서 다루는 사업부문이랑은 다르다. SKT가 다루고자하는 주요 사업부분이다. 조금더 자세하다. 아래는 IR자료에서 내용을 글로 재구성했다.

1. 유/무선통신: 1)유무선통신에는 MNO(Movile Network Operator, 이동 통신망을 보유한 이동 통신망 사업자, 직접 주파수를 할당받아 사업하는 것)부분이 우리가 알고있는 대부분의 SK텔레콤의 사업부문에 해당된다. 이 외에도 MVNO(Mobile Virtual Network Operator, 흔히 알뜰폰 사업자)도 여기에 포함되는데, SK텔레콤은 통신망을 가지고 있으니, MVNO사업자에게 빌려주고 돈을 수취하는 구조이다 [2]. 또한, SK텔레콤의 자회사(연결회사)인 SK브로드밴드의 주사업은 IPTV, CATAV 서비스를 제공하는 미디어사업과 유선통신사업(초고속인터넷, 유선전화, 전용회선, 데이터센터 등)을 영위한다. 앞서 말했지만, SK브로드밴드 사업을 유의깊게 보아야한다.

2. 미디어: T커머스(양방향 홈쇼핑정도?). 홈쇼핑이 고객이 듣기만해야하는 단방향이라면, TV및 개인방송을 결합하여 양방향으로 소통이 가능한 것이 T커머스 이다.(DART기준으로는 기타사업에 속한다). 이외, 팀 스튜디오(TEAM Studio, 가상스튜디오 생태계)도 있다. SK브로드밴드도 미디어에 속하기도 하는데 IPTV, CATV서비스를 제공하기 때문이다.

3. 엔터프라이즈: 데이터센터, 클라우드, AIoT(AI of things). AI기술과 5G등 디지털인프라를 구축하고, 기업드렝게 초지연 환경을 제공해서 각 사용자(기업들)의 생산성/경쟁력을 높이게끔하는 사업부분. 적용예시는 5G기술을 이용한 모바일 엣지컴퓨팅(MEC), MSP을 이용한 금융, 보안등.

4. AIVERSE: 구독 서비스(T우주). T우주는 국내외 다양한 기업들이랑 제휴해서 고객들한테 구독료를 받는 상품을 제공하고 있다. 예를 들어, 여러 편의점, 빵집, 피부과등을 연계해서 하나의 구독서비스로 묶어 제휴해서 판매하고있다. 고객은 구독료를 내고, 할인된 서비스를 받을 수 있으며, T우주는 이에따른 구독료를 받는다. "ifland"(이프랜드)는 메타버스 플랫폼이며, 추후 블록체인기술을 이용해서 메타버스내에서 경제시스템을 구축하려고한다고한다 [4].

 

그외 (5. Connected Intelligence) [2] 가 있으나.. 아직은... 구현된 사업부문은 아니다. 

그림1. SK텔레콤 사업구조(IR자료에서 언급하는 사업구조). 확대해서 보세요.

 

DART기준으로는 3가지인데, 무선/유선/기타사업이다. 미디어, 엔터프라이즈가 유무선사업에 통합되어있고, 스토어 등은 기타사업으로 취급되고 있다. 

그림 2. DART. SK텔레콤 분기보고서(2022.09)

 

 

 

Q. 주 사업부분별로 매출비중은? 무선통신 > 유선통신 >기타사업


DART에서 사업부문 3가지 별로 나누면, 매출비중은 무선통신, 유선통신, 기타사업부문으로 많다.

그림3. SK텔레콤의 사업부문(DART기준). 자료: DART. 무선통신사업, 유선통신사업으록만 구분되서 공개되고 있어서, 기타사업이 실적이 어느정도나오는지(아마 실적이 안나올태고 투자만 계속할텐데....) 고려해야할 것 같다. 다행히도 매출액비중 3.1%정도로 큰 사업규모는아니지만 적자사업일 것 같다.

 

그리고, 최근 각 사업부문별로 근황이 회사 IR자료에 나와있다. 고객증가 또는 매출액증가가 순이익증가는 아니기에 유의해서 보아야할 듯하다. 

그림 4.SK텔레콤의 사업부문 Highlight (자료: SK텔레콤 2022 4Q IR자료)

 

대충위에서 훑어보니 통신사업이 주력이기에, 이제 우리는 유/무선 통신사업이 잘될지 분석하면 된다. 통신사업이 잘될지는 아래의 요소를 따져보면 될 것이다.

  1. 통신비 ARPU가 증가하는지,
  2. 마케팅 경쟁을 적게 해도되는지 (마케팅비용의 감소),
  3. 신규투자를 너무 빡세게 안해도 되는지(감가상각비의 감소)
  4. 고객이 증가하는지
  5. 정책변수가 없는지(정책리스크): 예 중간요금제, 알뜰폰과의 수익분배(RS) 요율 감소

 

 

SK텔레콤 5G이후의 대중화 이후의 영업 비용은? 마케팅비와 감가상각


SK텔레콤 영엽이익은 주로 악영향을 받는 요인이 2가지가 있다고 알려져있다. 첫 번째는 마케팅비(광고선진비 + 지급수수료) 두 번째는 감가상가비이다. 마케팅비는 통신 3사가 뿌려야하는 돈이기 때문에 직접적으로 돈나가는 일이 많을거고, 투자설비에 악영향을 받는데, 아무래도 투자설비가 많으면 감가상각이 많고, 영업비용이 증가한다. 이때문에 영업이익율이 낮아지기도 한다.

- 감가상각비: 아래는 SK텔레콤의 주요 물적 재산들이다. 그리고, 그 물적재산들의 경재적가치의 할인율(상각)이다.무선토신사업중에 가장 큰 부분이 기계장치이이다. 단위가 백만원이니, 1조 7천억정도 감가했다는 것인데, 이건 여태 취득자산대비 총 상각내용이다. 무선통신사업이든, 유선이든 기계장치가 엄청나다. 아무래도 통신업상 통신장비가 노후화되면 그 자산을 갖다 팔아도 얼마 얼마 못받을 터이니... , 그럼 한해 감가상각은 얼마정도 되나? 주로 36,000억정도가 감가상각으로 나간다. 아마도 39기 (2022년)도 약 3조 6천억정도가 상각비로 나갈 것 같다. 평균적인 수치이긴하다. 

그림5. SK텔레콤 최근 36~39기의 손익게산서. 좌) 39기(2022년) 연결손익계산서 내에 감가상각비, 우) 최근 3개년의 연결손익계산서

 

SK텔레콤의 감가상각비는 대부분 토지를 제외하고, 정액법으로 계산한다. 다행히도 그림 6에 따르면, 최근 마케팅비용과 감가상각비가 거의 하향안정화 된 듯하다.

- 마케팅비도 줄일 수 있으면 줄일 수 있는 비용이라 SK텔레콤에서도 신경쓰는 비용이다. 회사 분할전, 연결손익이라 좀 애매하긴한데 IR자료에서는 이를 명시하고있다. 별도실적이기 떄문에, 거의 이동통신 매출만 있다. 이동통신매출을 내기 위해서 투자한 마케팅비용및 감가상각비가 작년대비 줄어듬이 보인다. 마케팅비용은 당분기에 안쓰면 그만인데, 감가상각비는 하향 안정화되었다는것은 내용연수가 다 되어, 상각 종료가 된 자산이 꽤 있다는 것으로 판단된다. 아마 15년전 취득한 자산들의 내용연수가 만료되었다는 것이다.

그림 6. 자료: SK텔레콤 3Q 별도실적. IR Presentation

 

 

5G에 대한 ARPU증가 어느정도 매출증가가 가능한가?


이제 수익성을 알아보자. SK텔레콤의 5G가입자가 약 1,200만명쯤 된다. 반면 마케팅비용은 안정화 되었다. SK텔레콤의 요금제에서 5G가 비싼것은 어느정도 소비자라면 체감할 것이다 (딱히 SK가 아니어도... 여튼). SK텔레콤의 가입자당평균매출(ARPU)은 3만 400원정도이다. 그리고, 이 ARPU가 계속증가한다는 것이다. 당연히 5G요금제가 대부분 고가라인이기 때문에, 5G요금제가 활성화될수록 ARPU가 증가하고, 이는 매출액증가로 이어진다. 휴대전화 단말기 매출은 더 비싼게, 이 ARPU에는 사물인터넷용 단가 낮은 ARPU도 포함되어있어, 희석되어있는 것이다. 이것을 제외하면 단말기 ARPU은 더 높다는 것이다. 그리고 SK텔레콤의 컨콜에서도 2011년 LTE출시이후에 ARPU가 5년이어졌다고 언급했다.  5G은 시대는 ARPU증가가 더 오래갈 것이라고 내다봤다.

 물론 정책변수가 있다. 윤정부에서 통신비절감을 위한 중간요금제 도입등으로 ARPU가 낮아질 수 있으나, 중간요금제가 통신 3사가 비슷한 요금제를 내어놓았는데, 애매한 선택폭이나온 입장에서는 큰 ARPU감소로 이어지진 않을 것 같다 [12].

그림 7.SK텔레콤 5G가입자 순증 (자료: SK텔레콤 2022년 3Q IR)

 

 

 

배당여력: 더좋아지는 배당여력


22년 3월 컨콜에서는 SKT은 다음과 같이 말하고 있다. "대 내외 환경이 어려운 상황에서도 ‘EBITDA(법인세 이자 감가상각비 차감 전 영업이익) – CapEx(설비투자)’의 30~40% 수준을 연간배당재원으로 설정해 분기 배당을 지속 하고 있다."[13] 우리가 바라는 것은 배당액이 느는 것. 즉, EBITDA가 늘거나, CapEx가 적정수준으로 관리되어 크게 지출을 안하거나 이다. CapEx은 최근에 들어 3.5Ghz은 이미 장비설치를 완료했다. 그리고 추가적인 3.5Ghz 주파수대역이나오는것도 큰 지출은 아니다 (28Ghz설치비가 아직 어느정도인지 감이안나옴).  따라서 EBITDA만 늘면된다. ARPU증가랑 5G고객 순증인 EBITDA을 증가시켜줄것이다. 알뜰폰 제외 5G고객의 M/S가 SK텔레콤이 1위인 것을 생각하면 배당여력도 증가할 수 있을 것이라고 본다 .

표 1. SK텔레콤 별도 IS. (2022 3Q)

 

 최근 SK텔레콤 관련 이슈


 

 

제 4통신사업자가 나올 수 있을까?: 10년도 넘은 떡밥. 취소된 28Ghz으로 수익 낼 수 있는 기업은 아직 없을 듯


이 떡밥은 2010년부터 있었다. 2010년 4G가 보급화될 때, 미래창조과학부(당시 과기부)가 SKT, KT, LG U+ 세 기업이 과점한 통신시장에 네 번째 사업자를 입해서, 서비스 경쟁을 일으켜 요금을 낮추고자했다. 이 공모는 2010년부터 시작해서 2016년에 이르러서 7번째였다 [5]. 7번째 공모가 있었고, 몇 기업이 참여했으나, 연간 몇조를 투자해야되기 때문에 무산되었다.

평가항목은 다음과 같다. 간통신역무능력(40점), 기간통신역무 계획의 이행에 필요한 재정적 능력(25점), 기술적 능력(25점), 이용자보호게획의 적정성(10점). 이를 종합하여, 최소 70점이상이 넘을 사업자에게 배정하려고 했는데, 매번 이 70점의 문턱을 넘지 못했다. 재정적 능력도 만만치 않다. 좀 봐줄 수도 없는 것이, 사업성이 실패하면 대규모 투자손실이 있기에, 정부도 깐깐하게 심사한다. 

최근 과기정통부에서 28Ghz대역 할당을 LGU+, KT은  취소해버리고, SKT은 단축하기로 했다 [9]. SK텔레콤은 일단 취소는 안하고 유예하고 내년초까지 1만 5천개 구축하지 않으면 취소한다고 했다. SKT은 2022년 11월 현재 1500개만 설치했다. 2023년 5월 말까지 13,500개를 더 설치해야하는데 어려워보이기도한다. 그리고, 이 취소가 확정되면, 과기정통부는 취소 주파수 대역중 1개의 대역에서 신규사업자 추진을 할 계획이라고 했다.

[7]의 기사에 따르면, 이미 저지연 5G 서비스를 하고 있는 기업인 플랫폼 기업(예, 네이버)가 할당받을 수도 있다고 한다. 이런 회사가 사업자가 될 수도 있다는 것이다. "주파수 취소가 확정되면 취소된 대역에 대한 신규 사업자의 진입을 촉진할 수 있을 것"이라고 정부 차관도 말했다. 이미 네이버는 4.7Ghz 도 받아놓고 28Ghz도 받아놓기도 했다. 다른 통신사는 어떤가? 세종텔레콤도 이미 5G특화망을 제공할 수 있다고한다. 2022년 10월에 5G 주파수를 할당받아서, 5G 서비스를 수행할 수 있다고 설명한다. 그러면, SK, KT, LG말고 다른 통신사가 나올수도 있다는 말인가? 이것은 틀렸다.

문제는 회수한(취소한) 대역폭이라는 것이다. 즉 제 4통신 사업자나오는 것은 28Ghz에 대한 제 4통신사라는 것이다.. 통신 3사가 돈을 버는 3.5Ghz은 대역들은 28Ghz가 아니다. 최근에 정부가 3.5Ghz와 28Ghz대역의 장치를 22,500개, 15,000개를 설치하라고 하였는데, 28Ghz 장치의설치가 부족했다는 것이다. 반대로, 신규사업자가 나오는 28Ghz 대역폭은 수요가 없는데 이 28Ghz을 정말 많이 깔아야한다는 것이다. 3.5Ghz대역폭은 아직 통신 3사가 꽉잡고있기 때문에, 가성비 좋은 대역폭이지만 못쓰고, 사업성(=경제성)이 안좋은 28Ghz을 제 4통신 사업자에게 줄 수도 있다는 것이다. 수조원이 드는 통신비용을 감당할 수 있을 것인가에 대한 것이다. 최근 기사에서도 기업들이 원하는 5G 대역폭은 3.7~4.0Ghz대역폭이다 [7].    

이미 쓰고있는 주파수는 아래의 기사와 같다 [8]. SK텔레콤이 3.5Ghz대역에서 가장 높은 주파수대역을 가져갔다. 28Ghz도 마찬가지이다. 낙찰가를 보면 알겠지만, 돈 벌수 있는 대역폭은 이미 통신 3사가 가져갔다. 3.5Ghz대역인 3.42 ~ 3.70대역폭은 이미 다 가져갔다. 더 높은 4Ghz등을 써도되지않을까? 그럴수도 있다. ETRI에서도 "5G 트래픽 이 증가함에 따라 현 5G 3.5GHz 대역의 280MHz 폭은 포화될 것으로 예상되므로 향후 적절한 시점 에 5G 추가 주파수를 공급해야 한다"라고 말하고 있다 [9]. 하지만 이것도 경매로 가져가야하는거고, 과기정통부는 취소된 28Ghz 주파수대역에 대한 신규사업자를 추질할 계획이라고 했다. 아직 수요가 없는 시장에 신규사업자를 추진한다는 것이다.

자료: ETRI.&nbsp;https://ettrends.etri.re.kr/ettrends/180/0905180001/34-6_1-16.pdf

 

 

 

 

Q. 알뜰폰이 많이 이용되면 통신사는 돈을 못버나?


돈을 못버는 것은 아니다. SK텔레콤도 알뜰폰 사업을 직접하고있다(SK텔링크). 하지만 가입자수가 타통신사대비해서 적긴하다. 알뜰폰 사업을 공격적으로 할수록 ARPU가 높은 5G에서 알뜰폰으로 가버리면, SK텔레콤입장에서는 제살 갂아먹기에 불과하기 때문이다. 여튼, 수익분배(RS), 또는 종량제(RM)이든 각 이통사의 자회사를 쓴다면 거의 비슷한데, 약간의 영업이익이 떨어질 것으로 생각된다. 예컨데, SK텔레콤에 10,000원을 내는거보다 9,000원의 요금이 SK텔링크로가면, SK텔레콤이 텔링크 100%지분을 가지고있어도, 9000원을 벌기 때문이다. 

 

최근 정부-사업자 수익분배(RS)요율을 변경하고자하는 움직임이 있다. 알뜰폰 사업을 활성화하기위해서, 수익분배요율(RS)을 MNO에게는 불리하게, MVNO에게는 유리하게 하기위한 요구사항이다. 이 요구는 주로 5G보다는 LTE  고가요금제에 대한 사항이다 [11]. 이 요율에서 SK텔레콤이 가져가는 비중이 높기 때문에, 알뜰폰 사업자가 광고비+인건비+수익분배한 몫을 다 더하는 값이 커진다는 것이다. 

다만, 알뜰폰 영역이 커질수록 직접 통신서비스를 판매하는 것이 마진율이 높은 SK텔레콤 입장에서는 반갑지는 않다. 

 

기타 사항: 제 4통신사가 나은가? 아니면 알뜰폰 활성화가 나은가?


한 기사를 보면, 제 4통신사보다는 통신망재판매사업자(MNVO)의 활성화가 더 필요하다는 지적이 있었다고 한다[6]. 통신 3사 중, 1위 업체의 점유율을 보면 타 나라보다 높아서, 이미 경쟁이 활발하지 못한 시장구조라는 것이다. 그리고 이미, 1,000만명이 넘어버린 알뜰폰 사업자가 거의 제 4위사업자처럼 되어있기 때문이, 이 사업구조에 변화를 주는 것이 더 나을 것이라는 평가도 나온다.

 

 

[1] SK텔레콤 뉴스룸, https://news.sktelecom.com/164695

[2] https://www.sktelecom.com/img/kor/annual/20220719/SKTelecomAnnualReport2021Korean.pdf 

[3] http://word.tta.or.kr/dictionary/dictionaryView.do?subject=Mobile%20Virtual%20Network%20Operator 

 

TTA정보통신용어사전

한국정보통신기술협회(TTA)는 정보통신 기술 발전과 타 분야와의 기술 융합에 따라 무수히 생성되는 정보통신용어를 해설하고 표준화하여, 전문가뿐만 아니라 비전문가들도 올바르게 활용할 수

word.tta.or.kr

[4] https://dart.fss.or.kr/dsaf001/main.do?rcpNo=20221111000361 

 

SK텔레콤/분기보고서/2022.11.11

잠시만 기다려주세요.

dart.fss.or.kr

[5] https://www.segye.com/newsView/20160129001649?OutUrl=naver 

 

제4이동통신,사업자 선정 결과 29일 발표에'들썩'..최종 문턱 넘을 수 있을까?

 정부가 29일 제4 이통통신 사업자를 선정하면 이동통신업계의 대변화가 예상된다.정부가 의도한대로 통신요금 인하와 서비스 향상이라는 두 마리 토끼를 잡을 수 있을지 귀추가 주목된다. 미

www.segye.com

[6] https://www.seoul.co.kr/news/newsView.php?id=20220405019009&wlog_tag3=naver 

 

11년째 ‘경쟁 미흡’… 제4 이통사 왜 안 나올까

요금 비싸 소비자에게 득보다 실 “변화 위해 알뜰폰 활성화 필요”, “경쟁이 미흡한 시장으로 판단된다.” SK텔레콤-KT-LG유플러스로 이어지는 우리나라 이동통신 시장 구도에 국책연구기관 정

www.seoul.co.kr

[7] https://www.hankyung.com/it/article/202211201315i

 

"28㎓는 별로지만 3.7㎓는 원해"…통신 3사 셈법 다른 까닭은 [이상은의 IT 산책]

"28㎓는 별로지만 3.7㎓는 원해"…통신 3사 셈법 다른 까닭은 [이상은의 IT 산책], 이상은 기자, 산업

www.hankyung.com

[8] https://www.yna.co.kr/view/GYH20180618001300044

 

[그래픽] SKTㆍKT, 5G 주파수 3.5GHz 최대 대역폭 낙찰 | 연합뉴스

(서울=연하뉴스) 장예진 기자 = SK텔레콤과 KT가 차세대 이동통신 5G 주파수 경매에서 전국망 대역인 3.5㎓(기가헤르츠)의 100㎒폭을 각...

www.yna.co.kr

 

[9]  https://ettrends.etri.re.kr/ettrends/180/0905180001/34-6_1-16.pdf

[10] https://news.mt.co.kr/mtview.php?no=2022111811255112020 

 

5G 망투자 미달…LGU+·KT 28㎓ 주파수 할당 '취소' - 머니투데이

SKT 이용기간 10% 단축…과기정통부 "기존 3사 중 1곳만 주파수 허용할 것"통신3사가 "진짜 5G"로 불리던 28㎓ 초고주파 대역 ...

news.mt.co.kr

[11] https://www.fnnews.com/news/202211141813070422

 

알뜰폰 무제한 요금제 더 싸질까… 정부-사업자 협상 ‘촉각’

정부가 이달 중 알뜰폰 활성화 방안을 담은 가계통신비 인하 대책을 발표할 것으로 예상되는 가운데, MVNO(알뜰폰) 업계의 관심은 정부와 이동통신사업자(MNO) 간 도매대가 협상에 집중되고 있다.

www.fnnews.com

[12] https://news.mt.co.kr/mtview.php?no=2022073107471923771 

 

"중간 맞나?" vs "1만원 절감"...5G 중간요금제에 엇갈린 반응 - 머니투데이

24GB 책정 애매, 6만9000원 요금제 절반도 안 돼"월 1만원 통신비 아껴서 좋아...더 다양화됐으면"SK텔레콤이 이달 5일 "5G 중간요금제&q...

news.mt.co.kr

[13] https://www.sktelecom.com/img/kor/qua/20221110/22%EB%85%843%EB%B6%84%EA%B8%B0%EC%8B%A4%EC%A0%81%EB%B0%9C%ED%91%9C%EB%B3%B4%EB%8F%84%EC%9E%90%EB%A3%8C.pdf

반응형

+ Recent posts