no image
[whisper fine tune] 파인튜닝 로드맵
SOTA 쉽게 달성 (State of Time Art) 최신 기술https://huggingface.co/blog/fine-tune-whisperhttps://velog.io/@mino0121/NLP-OpenAI-Whisper-Fine-tuning-for-Korean-ASR-with-HuggingFace-Transformers -> referencemodel_archive는 small, tiny, medium이든 학습시킬 whisper 배포 모델model_fineruned : 파인 튜닝 5번 이후 저장되는 모델model_output : 체크 포인트 3만번 이후에 저장trainer : huggingface에서 copy&pastemini batch로 조금씩 잘라서 feed-forward 학습을 시작한다bes..
2024.09.23
[whisper fine tune] AIhub 데이터로 전이학습 - 2
subcommand    - audio    - fileimport argparsefrom utils import PrepareDataset 오디오 처리def audio_process(config) -> None: print('Start audio processing') preprocessor = PrepareDataset() preprocessor.process_audio( source_dir=config.target_dir, remove_original_audio=config.remove_original_audio, ) **Configuration(구성/설정)**는 시스템이나 소프트웨어의 특정 작동 방식을 정의하거나 설정하는 과정이나 상태를 의미 파일 처..
2024.09.22
no image
[whisper fine tune] AIhub 데이터로 전이학습 - 1
https://openai.com/index/whisper/       ASR : Automatic speech recognitionDataset Processing따라서 우리는 tuple type의 데이터가 필요하다 (audio file, transcript)https://aihub.or.kr/aihubdata/data/view.do?currMenu=115&topMenu=100&aihubDataSe=realm&dataSetSn=123  AI-Hub분야한국어 유형 오디오 , 텍스트 구축년도 : 2018 갱신년월 : 2019-05 조회수 : 63,207 다운로드 : 14,574 용량 : 다운로드 관심데이터 등록 관심 139aihub.or.kr(target data for fine tuning)data>au..
2024.09.22
no image
6G 통신에 대해서
차세대 통신 마이크로디그리 삼성전자, 미국 프린스턴대와 ‘6G 혁신 선도’삼성전자, 미국 프린스턴대와 ‘6G 혁신 선도’NextG 이니셔티브 산학협력 프로그램 창립멤버 참여news.samsung.com 삼성전자, AI 기반 6G 기술 주도 위한 ‘AI-RAN 얼라이언스’ 참여https://news.samsung.com/kr/%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90-%EB%AF%B8%EA%B5%AD-%ED%94%84%EB%A6%B0%EC%8A%A4%ED%84%B4%EB%8C%80%EC%99%80-6g-%ED%98%81%EC%8B%A0-%EC%84%A0%EB%8F%84  에릭슨(Ericsson), 인텔(Intel), 미디어텍(MediaTek), 노키아 벨 연구소(Nokia Bell ..
2024.08.01
no image
통신 장비에 대한 이상 기후 감지 - prophet 모델
prophet은 페이스북이 공개한 시계열 예측 라이브러리가법 모형(addictive model)에 기반하여, 고전적인 통계적 기법을 발전시킴-> 독립적으로 표현된다 기존 시계열 모델 사용 시 문제점1. 완전자동화되는 시계열은 튜닝하기 어렵다.2. 기업 도메인 지식이 뛰어난 사람은 시계열에 대한 지식이 부족하다 prophet 장점- 트렌드와 주기적 특성 모델링 가능- 예외적이고 이벤트와 같은 휴가철 상황도 모델링 가능- 정확도가 높고 예측이 빠름- 직관적인 파라미터로 모델 수정이 용이prophet모델에서 접근 방식- ARIMA모델을 사용하여 이상 징후를 감지한 것과 동일하게 특정 임계값을 벗어나면 이상치라 정의모델링# 라이브러리 불러오기from fbprophet import Prophetimport pan..
2024.07.30
no image
통신 장비에 대한 이상 기후 감지 - ARIMA 모델
자기 회귀 / 누적 / 이동평균 모형과거의 관측값과 오차를 이용하여 현재의 시계열 값을 설명하는 모델ARIMA(d, p, q) 모형은 d차 차분한 데이터 위 AR(p) 모형과 MA(q)모형을 합친 ARIMA 모델을 일반화한 모델MA 화이트 노이즈를 누적시켜서 이동평균을 이용 요약 : d번 차분하면 정상인 y가 되고, 그걸 AR과 MA에 대해 적합시키면 모델학습이 가능하다 는 개념PACF : Partial AutoCorrelation Function시차에 따른 일련의 편자기상관이며, 시차가 다른 두 시계열 데이터 간의 상호 연관성즉, yt와 yt+1 간의 순수한 상관관계 -> ACF와 PACF를 통해서 파라미터 (p, d, q) 를 설정할 수 있다예시- 1차 차분한 데이터에 대해 정상성을 만족한다고 가정 ..
2024.07.30

SOTA 쉽게 달성 (State of Time Art) 최신 기술

https://huggingface.co/blog/fine-tune-whisper

https://velog.io/@mino0121/NLP-OpenAI-Whisper-Fine-tuning-for-Korean-ASR-with-HuggingFace-Transformers 

-> reference

model_archive는 small, tiny, medium이든 학습시킬 whisper 배포 모델

model_fineruned : 파인 튜닝 5번 이후 저장되는 모델

model_output : 체크 포인트 3만번 이후에 저장

trainer : huggingface에서 copy&paste

mini batch로 조금씩 잘라서 feed-forward 학습을 시작한다

best model은 train 한 epoch이 끝난다음 validation하고 loss가 가장 작은 값인 모델

fine-tuning 1회시 순서도

interference.py는 실제 모델 돌릴때 필요하고, trainer.evaluate는 평가할 때 쓰인다

평가지표로는 CER을 많이 쓴다. 

character error rate : 글자 하나하나가 의미가 있으므로 (조사)가 있어서

word error rate : 단어통으로 얼마나 에러가 있는지

7개의 메소드를 구현

 

< Argparse를 이용한 audio 처리를 위한 하부 명령어 (sub-command) 등록 및 터미널 arguments 등록 >

subcommand
    - audio
    - file
import argparse
from utils import PrepareDataset

 

오디오 처리

def audio_process(config) -> None:
    print('Start audio processing')
    preprocessor = PrepareDataset()
    preprocessor.process_audio(
        source_dir=config.target_dir,
        remove_original_audio=config.remove_original_audio,
    )

 

**Configuration(구성/설정)**는 시스템이나 소프트웨어의 특정 작동 방식을 정의하거나 설정하는 과정이나 상태를 의미

 

파일 처리

def file_process(config) -> None:
    print('Start file processing')
    preprocessor = PrepareDataset()
    if config.target_file:
        if not (
            config.csv or
            config.pkl or
            config.split_whole_data or
            config.split_train_test
        ):
            print(f'If --target-file (-t) is feed, \
one of --csv, --pkl, --split-train-test (-s) or \
--split-whole-data (-w) must be set.')
            return
        if config.csv:
            preprocessor.save_trn_to_csv(config.target_file)
        if config.pkl:
            preprocessor.save_trn_to_pkl(config.target_file)
        if config.split_whole_data:
            preprocessor.split_whole_data(config.target_file)
        if config.split_train_test:
            preprocessor.split_train_test(
                target_file=config.target_file,
                train_size=config.ratio
            )
    if config.convert_all_to_utf:
        if not config.target_dir:
            print('If --convert-all-to-utf8 (-c) flagged, you must feed --target-dir')
        preprocessor.convert_all_files_to_utf8(config.target_dir)
    if config.remove_all_text_files:
        if not config.target_dir:
            print(f'If --remove-all-text-files (-R) flagged,\
                    you must feed --target-dir')
            return
        preprocessor.remove_all_text_files(
            target_dir=config.target_dir,
            ext=config.remove_file_type
        )

 

오디오 와 파일을 다루기 위한 parser / subparser 정의

: argparse는 Python에서 명령줄 인자를 처리하기 위한 표준 라이브러리로, 다양한 옵션과 인자를 간편하게 정의하고 처리할 수 있습니다. 특히 딥러닝 프로젝트에서 오디오 파일을 처리할 때 argparse를 활용해 명령줄에서 다양한 동작을 관리할 수 있습니다. -> 터미널에서 바로 쓸 수 있음

1. ParserSubparser 정의

  • Parser: 최상위 명령어를 처리하는 객체입니다. 사용자가 실행하는 메인 프로그램의 명령줄 인자를 처리합니다. 예를 들어, 오디오 파일의 경로, 배치 크기, 학습률 등을 최상위 parser로 정의할 수 있습니다.
  • Subparser: 각 기능별로 세분화된 명령어입니다. 이를 통해 한 프로그램 내에서 여러 작업을 처리할 수 있습니다. 예를 들어, 오디오 파일을 전처리하거나 학습하거나 평가하는 명령을 각각 하부 명령어로 등록할 수 있습니다.
def get_parser() -> argparse.ArgumentParser:
    parser = argparse.ArgumentParser(
        prog='Korean speech dataset pre-processor',
        description='Process Korean speech dataset'
    )
    sub_parser = parser.add_subparsers(title='sub-command')
    
    ### Parser for sub-command 'audio' ###
    parser_audio = sub_parser.add_parser(
        'audio',
        help='sub-command for audio processing'
    )
    parser_audio.add_argument(
        '--target-dir', '-t',
        required=True,
        help='directory of audio files'
    )
    parser_audio.add_argument(
        '--remove-original-audio', '-r',
        action='store_true',
        help='Remove original audio files'
    )
    parser_audio.set_defaults(func=audio_process)
    
    ### Parser for sub-command 'file' ###
    parser_file = sub_parser.add_parser(
        'file',
        help='handling txt encoding, generate pkl/csv file,\
            or split file (train/test)'
    )
    parser_file.add_argument(
        '--target-file', '-t',
        # required=True,
        help='Target file name for processing'
    )
    parser_file.add_argument(
        '--convert-all-to-utf', '-c',
        action='store_true',
        help='Convert all text files to utf-8 under target_dir'
    )
    parser_file.add_argument(
        '--target-dir', '-d',
        # required=True,
        help='Target directory for converting file encoding to utf-8\
            Use by combining --convert-all-to-utf (-c) flag'
    )
    parser_file.add_argument(
        '--split-whole-data', '-w',
        action='store_true',
        help='Split whole data file int group'
    )
    parser_file.add_argument(
        '--csv',
        action='store_true',
        help='Generate csv file'
    )
    parser_file.add_argument(
        '--pkl',
        action='store_true',
        help='Generate pickle file'
    )
    parser_file.add_argument(
        '--split-train-test', '-s',
        action='store_true',
        help='Flag split train/test set, \
              default: 0.8 (train:test -> 80:20)'
    )
    parser_file.add_argument(
        '--ratio',
        type=float,
        default=0.8,
        help='Split file into .train & .test files'
    )
    parser_file.add_argument(
        '--remove-all-text-files', '-R',
        action='store_true',
        help='Remove all specific type files under target dir'
    )
    parser_file.add_argument(
        '--remove-file-type',
        default='txt',
        help='Set remove file type'
    )
    
    parser_file.set_defaults(func=file_process)
    config = parser.parse_args()
    return config

utils.py에 있는 함수를 불러쓸 수 있음

 

 

 

 

 

 

 

 

 

 

 

https://openai.com/index/whisper/       ASR : Automatic speech recognition


Dataset Processing

따라서 우리는 tuple type의 데이터가 필요하다 (audio file, transcript)

https://aihub.or.kr/aihubdata/data/view.do?currMenu=115&topMenu=100&aihubDataSe=realm&dataSetSn=123 

 

AI-Hub

분야한국어 유형 오디오 , 텍스트 구축년도 : 2018 갱신년월 : 2019-05 조회수 : 63,207 다운로드 : 14,574 용량 : 다운로드 관심데이터 등록 관심 139

aihub.or.kr

(target data for fine tuning)

data
>audio : 오디오 (PCM : Pulse Code Modulation, 펄스 부호 변조 - 아날로그 신호를 디지털로 변환하는 방식)

>info : trn 전사데이터 (SRT : subrip subtitle(시간포함), TRN(Transcription) 순수한 전사데이터)

- Create virtual env & work direc

- Move or copy files in our working directory : unzip -q KsponSpeeh_03.zip

- convert all text files into utf-8 encoding : 

- Process '.pcm' files into '.wav' format : python <파일이름.py> file --opts

utils.py를 만든다

PrepareDataset 클래스를 만든다
def pcm2audio(
        self,
        audio_path: str,
        ext: str = 'wav',
        save_file: bool = True,
        remove: bool = False, # Keep original audio file
    ) -> object:
        '''참고 블로그: https://noggame.tistory.com/15'''
        buf = None
        with open(audio_path, 'rb') as tf:
            buf = tf.read()
            # zero (0) padding
            # 경우에 따라서 PCM 파일의 길이가 8bit(1byte)로
            # 나누어 떨어지지 않는 경우가 있어 0으로 패딩을 더해준다.
            # 패딩하지 않으면 numpy나 librosa 사용 시 오류가 날 수 있다.
            buf = buf+b'0' if len(buf)%2 else buf
        pcm_data = np.frombuffer(buf, dtype='int16')
        wav_data = lr.util.buf_to_float(x=pcm_data, n_bytes=2)
        
        # 음성 파일을 변환하여 저장: .pcm -> .wav
        if save_file:
            save_file_name = audio_path.replace('.pcm', f'.{ext}')
            sf.write(
                file=save_file_name,
                data=wav_data,
                samplerate=16000,
                format='WAV',
                endian='LITTLE',
                subtype='PCM_16'
            )
        
        # 파일 삭제 옵션일 경우에는 .pcm 파일 삭제
        if remove:
            if os.path.isfile(audio_path):
                os.remove(audio_path)
        
        return wav_data

.pcm 파일을 .wav 파일로 변환한 후 현재 디렉토리에 저장

def process_audio(
        self,
        source_dir: str,
        remove_original_audio: bool = True
    ) -> None:
        '''.pcm 파일을 .wav 파일로 변환한 후 현재 디렉토리에 저장'''
        print(f'source_dir: {source_dir}')
        sub_directories = sorted(os.listdir(source_dir))
        print(f'Processing audios: {len(sub_directories)} directories')
        for directory in tqdm(sub_directories, desc=f'Processing directory: {source_dir}'):
            if os.path.isdir(directory):
                files = os.listdir(os.path.join(source_dir, directory))
                for file_name in files:
                    if file_name.endswith('.pcm'):
                        self.pcm2audio(
                            audio_path=os.path.join(source_dir, directory, file_name),
                            ext='wav',
                            remove=remove_original_audio,
                        )
            else:
                file_name = directory
                if file_name.endswith('.pcm'):
                    self.pcm2audio(
                        audio_path=os.path.join(source_dir, file_name),
                        ext='wav',
                        remove=remove_original_audio,
                    )

모든 텍스트 파일을 utf-8 인코딩으로 변경

def convert_text_utf(self, file_path: str) -> None:
        '''파일 인코딩 변경: cp494 -> utf-8로 변환하여 저장'''
        try:
            with open(file_path, 'rt', encoding='cp949') as f:
                lines = f.readlines()
        except:
            with open(file_path, 'rt', encoding='utf-8') as f:
                lines = f.readlines()
        with open(file_path, 'wt', encoding='utf-8') as f:
            for line in lines:
                f.write(line)


    def convert_all_files_to_utf8(self, target_dir: str) -> None:
        '''디렉토리 내부의 모든 텍스트 파일을 utf-8 인코딩으로 변경'''
        print(f'Target directory: {target_dir}')
        sub_directories = sorted(os.listdir(target_dir))
        num_files = 0
        for directory in tqdm(sub_directories, desc='converting cp949 -> utf8'):
            files = sorted(os.listdir(os.path.join(target_dir, directory)))
            for file_name in files:
                if file_name.endswith('.txt'):
                    self.convert_text_utf(
                        os.path.join(target_dir, directory, file_name)
                    )
                    num_files += 1
        print(f'{num_files} txt files are converted.')
        print('Done!')

전체 데이터 파일 (train.trn)을 그룹별로 구분

def split_whole_data(self, target_file:str) -> None:
        '''전체 데이터 파일 (train.trn)을 그룹별로 구분
        For example, in train.trn file
            KsponSpeech_01/KsponSpeech_0001/KsponSpeech_000001.pcm :: 'some text'
                -> this file will be stored in train_KsponSpeech_01.trn
            KsponSpeech_02/KsponSpeech_0001/KsponSpeech_000002.pcm :: 'some text'
                -> this file will be stored in train_KsponSpeech_02.trn
        '''
        with open(target_file, 'rt') as f:
            lines = f.readlines()
            data_group = set()
            for line in lines:
                data_group.add(line.split('/')[0])
        data_group = sorted(list(data_group))
        data_dic = { group: [] for group in data_group} # dict comprehension
        for line in lines:
            data_dic[line.split('/')[0]].append(line)
        # Save file seperately
        # target_file: data/info/train.trn -> ['data', 'info', 'train.trn']
        save_dir = target_file.split('/')[:-1]
        save_dir = '/'.join(save_dir)
        for group, line_list in data_dic.items():
            file_path = os.path.join(save_dir, f'train_{group}.trn')
            with open(file_path, 'wt', encoding='utf-8') as f:
                for text in line_list:
                    f.write(text)
                print(f'File created -> {file_path}')
        print('Done!')

 dict 형태로 가공하여 리턴 -> .csv로 통합하여 저장

def get_dataset_dict(self, file_name: str, ext: str = 'wav') -> dict:
        '''path_dir에 있는 파일을 dict 형태로 가공하여 리턴
            return data_dic = {
                        'audio': ['file_path1', 'file_path2', ...],
                        'text': ['text1', 'text2', ...]
            }'''
        data_dic = {'path': [], 'sentence': []}
        print(f'file_name: {file_name}')
        with open(file_name, 'rt', encoding='utf-8') as f:
            lines = f.readlines()
            for line in lines:
                audio, text = line.split('::')
                audio = audio.strip()
                audio = os.path.join(
                    os.getcwd(), # '/home/kafa46/finetune-tutorial'
                    self.VOICE_DIR.replace('./', ''), # './data/audio' -> 'data/audio'
                    audio
                )
                if audio.endswith('.pcm'):
                    audio = audio.replace('.pcm', f'.{ext}')
                text = text.strip()
                data_dic['path'].append(audio)
                data_dic['sentence'].append(text)
        return data_dic
        

    def save_trn_to_pkl(self, file_name: str) -> None:
        '''.trn 파일을 dict로 만든 후 .pkl 바이너리로 그냥 저장(dump)'''
        data_dict = self.get_dataset_dict(file_name)
        # pickle file dump
        file_name_pickle = file_name + '.dic.pkl'
        with open(file_name_pickle, 'wb') as f:
            pickle.dump(data_dict, f)
        print(f'Dataset is saved via dictionary pickle')
        print(f'Dataset path: {file_name_pickle}')


    def save_trn_to_csv(self, file_name: str) -> None:
        '''.trn 파일을 .csv로 저장'''
        data_dic = self.get_dataset_dict(file_name)
        file_name_csv = file_name.split('.')[:-1]
        file_name_csv = ''.join(file_name_csv) + '.csv'
        if file_name.startswith('.'):
            file_name_csv = '.' + file_name_csv
        data_df = pd.DataFrame(data_dic)
        # Modified by Giseop Noh since Whisper dataset needs header ㅠㅠ
        #   modified: header=False -> header=True
        data_df.to_csv(file_name_csv, index=False, header=True)
        print(f'Dataset is saved via csv')
        print(f'Dataset path: {file_name_csv}')

 

 


- Split dataset into 'train' & 'test'

def split_train_test(self, 
        target_file: str, 
        train_size: float = 0.8
    ) -> None:
        '''입력 파일(.trn)을 train/test 분류하여 저장
            if train_size is 0.8,
                train:test = 80%:20%
        '''
        with open(target_file, 'rt') as f:
            data = f.readlines()
            train_num = int(len(data) * train_size)
            
        # If you set header (header=True) in csv file, you need following codes
        #   - Modified by Giseop Noh since Whisper dataset needs header ㅠㅠ
        header = None
        if target_file.endswith('.csv'):
            header = data[0]
            data = data[1:]
            train_num = int(len(data)*train_size)
        
        shuffle(data)
        data_train = sorted(data[0:train_num])
        data_test = sorted(data[train_num:])
        
        # train_set 파일 저장
        train_file = target_file.split('.')[:-1]
        train_file = ''.join(train_file) + '_train.csv' 
        if target_file.startswith('.'):
            train_file = '.' + train_file
        with open(train_file, 'wt', encoding='utf-8') as f:
            if header:
                f.write(header)
            for line in data_train:
                f.write(line)
        print(f'Train_dataset saved -> {train_file} ({train_size*100:.1f}%)')
        
        # test_set 파일 저장
        test_file = target_file.split('.')[:-1]
        test_file = ''.join(test_file) + '_test.csv' 
        if target_file.startswith('.'):
            test_file = '.' + test_file
        with open(test_file, 'wt', encoding='utf-8') as f:
            if header:
                f.write(header)
            for line in data_test:
                f.write(line)
        print(f'Test_dataset saved -> {test_file} ({(1.0-train_size)*100:.1f}%)')

실제 함수 호출

if __name__=='__main__':
    # audio = 'data/audio/KsponSpeech_01/KsponSpeech_0001/KsponSpeech_000001.pcm'
    # prepareds = PrepareDataset()
    # prepareds.pcm2audio(audio_path=audio, remove=True)
    # source_dir = 'data/audio/KsponSpeech_01'
    # prepareds = PrepareDataset()
    # prepareds.process_audio(source_dir=source_dir)
    # text_file = 'data/audio/KsponSpeech_01/KsponSpeech_0001/KsponSpeech_000004.txt'
    # target_dir = 'data/audio/KsponSpeech_01'
    # target_file = './data/info/train_KsponSpeech_0.csv'
    # prepareds = PrepareDataset()
    # data_dict = prepareds.get_dataset_dict(target_file)
    # print(data_dict)
    # prepareds.save_trn_to_csv(target_file)
    # target_dir = 'data/audio/KsponSpeech_01'
    # prepareds.remove_all_text_files(target_dir)
    pass

 

결론적으로, 폴더 안에 .wav 오디오파일과 .txt 텍스트파일 하나씩 묶음으로 정리되면 된다 !!

6G 통신에 대해서

파이썬정복
|2024. 8. 1. 15:40

차세대 통신 마이크로디그리 

삼성전자, 미국 프린스턴대와 ‘6G 혁신 선도’



삼성전자, 미국 프린스턴대와 ‘6G 혁신 선도’

NextG 이니셔티브 산학협력 프로그램 창립멤버 참여

news.samsung.com

 

삼성전자, AI 기반 6G 기술 주도 위한 ‘AI-RAN 얼라이언스’ 참여

https://news.samsung.com/kr/%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90-%EB%AF%B8%EA%B5%AD-%ED%94%84%EB%A6%B0%EC%8A%A4%ED%84%B4%EB%8C%80%EC%99%80-6g-%ED%98%81%EC%8B%A0-%EC%84%A0%EB%8F%84  

에릭슨(Ericsson), 인텔(Intel), 미디어텍(MediaTek), 노키아 벨 연구소(Nokia Bell Labs), 퀄컴 테크놀로지(Qualcomm Technologies), 보다폰(Vodafone) 등 세계 주요 통신 및 반도체 기업들이 NextG 프로그램의 창립 멤버로 참여했다


6g 차세대 이동통신

https://blog.naver.com/rohdeschwarzkorea/223394505408

 

차세대 이동통신 6G로 가는 길 - Part 2. AI(Artificial Intelligence) and ML(Machine Learning)

차세대 이동통신 6G와 AI(Artificial Intelligence) and ML(Machine Learning) 2030년 상용화를 ...

blog.naver.com

 

앤시스(Ansys), Arm, 스위스 취리히연방공과대학(ETH Zurich), 후지쯔(Fujitsu), 키사이트(Keysight), 노키아(Nokia), 노스이스턴 대학교(Northeastern University), 로데슈바르츠(Rohde & Schwarz), 삼성, 소프트뱅크(Softbank), 비아비(Viavi) 등이 이 솔루션을 가장 먼저 도입한 에코시스템 파트너이다.
http://www.tnews.kr/news/articleView.html?idxno=112737
엔비디아, AI로 무선 통신 발전시킬 6G 리서치 클라우드 플랫폼 공개
출처 : 티뉴스(http://www.tnews.kr)

 

https://news.samsung.com/kr/%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90-ai-%EA%B8%B0%EB%B0%98-6g-%EA%B8%B0%EC%88%A0-%EC%A3%BC%EB%8F%84-%EC%9C%84%ED%95%9C-ai-ran-%EC%96%BC%EB%9D%BC%EC%9D%B4%EC%96%B8%EC%8A%A4-%EC%B0%B8%EC%97%AC 

 

삼성전자, AI 기반 6G 기술 주도 위한 ‘AI-RAN 얼라이언스’ 참여

삼성전자가 AI를 통해 차세대 통신 기술인 6G 주도에 나선다. 삼성전자는 26일 AI와 무선통신 기술 융합을 통해 6G 기술 연구와 생태계 조성을 목표로 하는 ‘AI-RAN 얼라이언스(AI-RAN Alliance)’의 창

news.samsung.com


통신 좀 알고가자

 

1세대 이동통신 : 전화만을 목적으로

2세대 디지털셀룰러통신 : 폴더폰, CDMA, TDMA, 문자서비스

3세대 멀티미디어통신 : 스마트폰 등장 , 광대역 CDMA, 동영상

4세대 고화질스트리밍 : LTE 등장 통신 규격,

breakthrough : OFDM 변복적 방법 등장, 다중 안테나 기법, MIMO 폭발적 데이터 스트림 지원

5세대 5G : 3.5 28 기가헤르츠 초고속 초지연 초대용량 -> 전송시스템 기존 4G시스템보다 10배 빠름

2020년대 후반까지 지원

6세대 6G : 치열한 연구와 투자를 통해 연구방향

1. 3.5기가헤르츠를 넘는 THZ 통신

2. 우주공간 통신

3. 머신러닝 인공지능 지능형 통신 연구 기법

 

테라헤르츠는? 기가 헤르츠의 1000배 

광대역 주파수 확보가 주된 요건

2Gbps 5G의 전송속도 -> 수백기가 Gbps 6g의 전송 속도

 

주파수 대역이 높아지면 전파가 도달할 수 있는 거리가 짧아진다

1km내외의 거리를 충족하기에 너무 부족 (아직은 수십 미터)

 

위성 통신

대부분 지상에만 이루어지는 지상 네트워크 설계를 연구

지상뿐만 아니라 위성까지 아우르는 확장된 네트워크를 연구함

 

전통적인 기법 수학적으로 접근

딥러닝 기법이 기존 통신 기법보다 더 우월한 성능을 보여준다

향상된 통신 서비스가 가능할 것이다. 

6G 표준화에 들어갈 수 있는 

사용자가 실시간으로 움직이기 때문에 인공지능 설계가 더욱 어렵다

 

fix된 환경에서 설계된 알고리즘이 다른 환경에도 적용이 가능한지?

사용자수에 관계없이 어디서든지 적용가능한지


질문

중요한 건 알겠음 , but 아직 상용화가 안되어서 찾아봐도 내용이 딱히 구체적이지 않음

 

연구를 우리 학교에서 하지는 않는가

 

대학원 진학에 앞서서 연구 경험을 해보고 싶다

 

사실 반도체 데이터 분석이 연구라기 보다는 실제 쓰이는 산업공학에 가까운 분야인 것 같다. 한계를 느낀 점이 기업 실무 데이터다 보니까 접근하기가 쉽지 않다. 

인공지능 반도체도 인공지능 사용을 위한 반도체, 칩를 설계/ 소재 개발하는 일이지. 그걸 만들기 위해 딥러닝모델을 쓰는 것은 아닌것 처럼 보였다

 

혹시 통종설에서 무엇을 하실 계획인지, 셀룰러통신을 위한 인공지능 ,차세대셀룰러통신 2가지 과목 

통신공학 신규 교수님에 대한 정보?

 

국내에서 연구를 많이 하는 연구소 는 어떤지, 방학에 연구소 인턴십이라도 뛰고 싶다

 


교수님께 오늘 얻은 키워드 

adaptive comminication

KT sat 회사 위성통신

NFV

SDN

location and communicaton

필드 체크
환경캡체데이터 : 단말기 디지털데이터캡처
새로운모델 개발할때 실험실안에서 환경재구현해서 / 5g신호를 실습

 

< plot을 정리해보자 >

 

삼성전자 MX 사업부 AI/ML을 쓰는 내용은 9월부터 시작될 예정이다

MT8000이라는 네트워크 장비를 쓴다

로데 슈바르츠(독일) / keysight(미국) / anritsu(일본)

네트워크 장비회사는 총 3개

 

3가지 키워드 

테라헤르츠 : 너무 직진성이 커서 상용화에 문제가 있을 수 있다. 

위성통신 : 현재 가장 활발히 되는 연구, 

machine learning :

 

결론

=> 일단 2학기에 차세대 통신 쏟아보고, 맞으면 이쪽 분야로 MX 취업 후 해외 석사 고고씽

=> 내년 1학기에 stratio 회사 붙으면 생각해보기

=> 일단 학점을 높이는데 집중하자. (3.5 -> 4.0 만들기)

18학점 모든 학점을 A0만 받을 수 있도록 노력해야함 (B+ 용납 x)

=> 6G 관련 연구하는 국내 교수 알아보기

=> 해외 석사 타임라인 명시하기 (언제 GRE, 토플 준비.../비용 어떻게 마련(장학금))


급 클라우드 접근하게 생겼는데

위밋 : 메가존 클라우드 : 최신 인공지능 트렌드 및 프로젝트 기획 

메가존, 디딤365, GS ITM, 에티버스, 베스핀글로벌) 클라우드 CSP기업에

 

 

 

 

 

 

 

 

 

prophet은 페이스북이 공개한 시계열 예측 라이브러리

가법 모형(addictive model)에 기반하여, 고전적인 통계적 기법을 발전시킴

-> 독립적으로 표현된다

 

기존 시계열 모델 사용 시 문제점

1. 완전자동화되는 시계열은 튜닝하기 어렵다.

2. 기업 도메인 지식이 뛰어난 사람은 시계열에 대한 지식이 부족하다

 

prophet 장점

- 트렌드와 주기적 특성 모델링 가능

- 예외적이고 이벤트와 같은 휴가철 상황도 모델링 가능

- 정확도가 높고 예측이 빠름

- 직관적인 파라미터로 모델 수정이 용이


prophet모델에서 접근 방식

- ARIMA모델을 사용하여 이상 징후를 감지한 것과 동일하게 특정 임계값을 벗어나면 이상치라 정의


모델링

# 라이브러리 불러오기
from fbprophet import Prophet
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

import pickle5 as pickle
import warnings

warnings.filterwarnings(action='ignore') # warning ignore 

pd.options.display.max_rows = 80
pd.options.display.max_columns = 80
sns.set_style("whitegrid")

%matplotlib inline

 

 

 

 

 

 

 

 

 

자기 회귀 / 누적 / 이동평균 모형

과거의 관측값과 오차를 이용하여 현재의 시계열 값을 설명하는 모델

ARIMA(d, p, q) 모형은 d차 차분한 데이터 위 AR(p) 모형과 MA(q)모형을 합친 ARIMA 모델을 일반화한 모델

MA 화이트 노이즈를 누적시켜서 이동평균을 이용 

요약 : d번 차분하면 정상인 y가 되고, 그걸 AR과 MA에 대해 적합시키면 모델학습이 가능하다 는 개념


PACF : Partial AutoCorrelation Function

시차에 따른 일련의 편자기상관이며, 시차가 다른 두 시계열 데이터 간의 상호 연관성

즉, yt와 yt+1 간의 순수한 상관관계

 

-> ACF와 PACF를 통해서 파라미터 (p, d, q) 를 설정할 수 있다

예시

- 1차 차분한 데이터에 대해 정상성을 만족한다고 가정 => d = 1

- ACF : 전체적으로 양의 상관관계를 가지고 있으며, 시차가 2일때 0에 접근하므로 q = 2로 설정

- PACF : 시차가 1일 때 0에 근접하므로 p = 1로 설정

ARIMA(1,1, 2)


이상 징후 감지 순서

1. 정상성 검증

2. ARIMA모델 파라미터 (p, d, q) 찾기

3. 최적의 파라미터로 ARIMA 학습

4. 특정 임계값 이상인 값에 대해 이상치로 판단